J'ai un champ varchar dans ma table et je veux le trier. Mais je dois gérer ce champ comme un entier. Ce qui signifie que si tri en texte, l'ordre est "19,2,20" mais je veux obtenir le bon ordre "2,19,20".
Quelqu'un peut-il m'aider?
Je n'ai pas réussi à exécuter la requête avec CAST
. J'obtenais toujours Error Code: 1064 near "DECIMAL"
(ou tout autre type numérique que j'ai choisi). J'ai donc trouvé une autre façon de trier varchar
en nombres:
SELECT *
FROM mytable
ORDER BY ABS(mycol)
Un peu plus simple et fonctionne dans mon cas.
SELECT *
FROM mytable
ORDER BY
CAST(mycol AS DECIMAL)
Voici la solution
SELECT * FROM MyTable ORDER BY ABS(MyCol);
Toutes les autres réponses utilisent ABS
, qui convertit les valeurs en valeurs absolues (positives), en supposant que les entiers sont positifs. Une meilleure solution serait d'utiliser * 1
:
SELECT * FROM mytable ORDER BY mycol * 1
Ceci pour éviter de convertir des nombres négatifs en nombres positifs. Inspiré par: mysql sort string number
Vous pouvez ABS()
à cet effet. ABS () est une fonction mathématique qui renvoie la absolute (positive) value of the specified expression
. Donc, la requête sera quelque chose comme ça
SELECT * FROM MyTable ORDER BY ABS(MyCol);
Vous pouvez commander le champ varchar en utilisant ce code en fonction de vos besoins
SELECT * FROM mytable ORDER BY ABS(mycol)