Domanda

Ho una colonna di numeri memorizzati come caratteri. Quando eseguo un ORDER BY per questa colonna ottengo quanto segue:

100 | 131
200
21
30
31000
ecc.

Come posso ordinare questi caratteri numericamente? Devo convertire qualcosa o esiste già un comando o una funzione SQL per questo?

Grazie.

È stato utile?

Soluzione

Prova questo:

ORDER BY CAST(thecolumn AS int)

Altri suggerimenti

Questo ha funzionato per me:

ORDER BY ABS(column_name)

Questo è un problema con l'ordinamento di stringhe numeriche in un " ordinamento naturale " (se cerchi " ordinamento naturale " su Google troverai tantissime cose). Essenzialmente il cast della stringa come int e l'ordinamento sul valore risultante dovrebbero risolverlo.

La ragione di ciò è che con un tipo di dati char, stai ordinando le righe come una stringa.

L'idea di ORDER BY CAST() è corretta, tuttavia le prestazioni di questo diminuiranno all'aumentare del numero di risultati restituiti.

Se in questa colonna sono presenti solo dati numerici, la migliore pratica sarebbe quella di trovare un tipo di dati numerico adatto e modificarlo.

Se non riesci davvero a cambiare la colonna e ti accorgi che hai problemi di prestazioni, ti suggerisco di avere una colonna di ordinamento che contenga il valore cast in un numero intero (i valori null saranno convertiti in un valore appropriato).

Indicizza la colonna di ordinamento e idealmente aggiungi un trigger alla colonna CHAR in modo che inserimenti o aggiornamenti al valore char attivino un aggiornamento al valore intero.

In alcune situazioni questa potrebbe essere una buona corrispondenza:

ORDER BY LENGTH(column_name), column_name

Soprattutto se hai una colonna con tutte le cifre o un mix di lettere e cifre ma tutte della stessa lunghezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top