web-dev-qa-db-fra.com

mysql commande le champ varchar comme entier

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?

32
ntan

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.

56
yentsun
SELECT  *
FROM    mytable
ORDER BY
        CAST(mycol AS DECIMAL)
23
Quassnoi

Voici la solution

SELECT * FROM MyTable ORDER BY ABS(MyCol);
16
speeday125

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

7
Guido

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);
6
user2243219

Vous pouvez commander le champ varchar en utilisant ce code en fonction de vos besoins

SELECT * FROM mytable ORDER BY ABS(mycol)
2