Question

J'ai une colonne de nombres stockée sous forme de caractères. Lorsque je fais ORDER BY pour cette colonne, je reçois le texte suivant:

100
131
200
21
30
31000
etc.

Comment puis-je commander ces caractères numériquement? Dois-je convertir quelque chose ou existe-t-il déjà une commande ou une fonction SQL pour cela?

Merci.

Était-ce utile?

La solution

Essayez ceci:

ORDER BY CAST(thecolumn AS int)

Autres conseils

Cela a fonctionné pour moi:

ORDER BY ABS(column_name)

Ceci est un problème avec le classement des chaînes numériques dans un & "sort naturel &"; (Si vous recherchez & "Tri naturel" sur Google, vous en trouverez des tonnes). Essentiellement, convertir la chaîne en int et trier sur la valeur résultante devrait résoudre le problème.

La raison en est qu’avec un type de données char, vous triez les lignes sous forme de chaîne.

L'idée de ORDER BY CAST() est la bonne, mais sa performance diminuera à mesure que le nombre de résultats renvoyés augmente.

S'il ne s'agit que de données numériques dans cette colonne, la meilleure pratique consiste à rechercher un type de données numérique approprié et à le modifier.

Si vous ne pouvez vraiment pas changer la colonne et que vous vous retrouvez confronté à des problèmes de performances, je suggère de disposer d'une colonne d'ordre de tri contenant la valeur convertie en un entier (les valeurs NULL seront converties en une valeur appropriée).

Indexez la colonne de l'ordre de tri et, idéalement, ajoutez un déclencheur à la colonne CHAR de sorte que les insertions ou les mises à jour de la valeur char déclenchent une mise à jour de la valeur entière.

Dans certaines situations, cela pourrait être une bonne correspondance:

ORDER BY LENGTH(column_name), column_name

Surtout si vous avez une colonne contenant tous les chiffres ou un mélange de lettres et de chiffres mais ayant tous la même longueur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top