ordre mysql du 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 entier. Ce qui signifie que si tri comme texte l'ordre est "19,2,20" mais je veux obtenir le bon ordre "2,19,20".

quelqu'un Peut-il m'aider?

29
demandé sur Patrick Kostjens 2009-10-26 17:33:00

6 réponses

Je n'ai pas réussi à lancer la requête avec CAST . J'obtenais toujours Error Code: 1064 near "DECIMAL" (ou un autre type numérique que j'ai choisi). Donc, j'ai trouvé un autre moyen de trier varchar comme nombres:

SELECT *
FROM mytable
ORDER BY ABS(mycol)

Un peu plus simple et fonctionne dans mon cas.

48
répondu yentsun 2013-04-03 07:20:37
SELECT  *
FROM    mytable
ORDER BY
        CAST(mycol AS DECIMAL)
20
répondu Quassnoi 2017-04-09 16:37:45

Voici la solution

SELECT * FROM MyTable ORDER BY ABS(MyCol);
14
répondu speeday125 2013-05-09 05:06:31

toutes les autres réponses utiliser 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 transformer des nombres négatifs en nombres positifs. Inspiré par: mysql numéro de chaîne de tri

7
répondu Guido 2017-05-23 12:10:30

Vous pouvez ABS() à cette fin. ABS() est une fonction mathématique qui renvoie le absolute (positive) value of the specified expression . Donc, la requête va être quelque chose comme ceci

SELECT * FROM MyTable ORDER BY ABS(MyCol);
6
répondu 2013-04-04 04:42:52

vous pouvez commander varchar champ en utilisant ce code selon votre requis

SELECT * FROM mytable ORDER BY ABS(mycol)
2
répondu Rabesh Lal Shrestha 2012-06-05 11:35:15