MySQL порядок полей VARCHAR в виде целого числа - PullRequest
31 голосов
/ 26 октября 2009

У меня в таблице есть поле varchar, и я хочу его отсортировать. Но мне нужно обработать это поле как целое число. Это означает, что при сортировке по тексту порядок будет «19,2,20», но я хочу получить правильный порядок «2,19,20».

Кто-нибудь может мне помочь?

Ответы [ 6 ]

52 голосов
/ 16 сентября 2011

Мне как-то не удалось запустить запрос с CAST. Я всегда получал Error Code: 1064 near "DECIMAL" (или другой числовой тип, который я выбрал). Итак, я нашел другой способ сортировки varchar по номерам:

SELECT *
FROM mytable
ORDER BY ABS(mycol)

Немного проще и работает в моем случае.

22 голосов
/ 26 октября 2009
SELECT  *
FROM    mytable
ORDER BY
        CAST(mycol AS DECIMAL)
16 голосов
/ 16 марта 2013

Вот решение

SELECT * FROM MyTable ORDER BY ABS(MyCol);
7 голосов
/ 12 января 2016

Все остальные ответы используют ABS, который преобразует значения в абсолютные (положительные) значения, предполагая, что целые числа положительные. Лучшим решением было бы использовать * 1:

SELECT * FROM mytable ORDER BY mycol * 1

Это предотвращает приведение отрицательных чисел к положительным. Вдохновлен: mysql сортировать номер строки

6 голосов
/ 04 апреля 2013

Вы можете ABS() для этой цели. ABS () - это математическая функция, которая возвращает absolute (positive) value of the specified expression. Так что запрос будет выглядеть примерно так

SELECT * FROM MyTable ORDER BY ABS(MyCol);
2 голосов
/ 05 июня 2012

Вы можете заказать поле varchar, используя этот код в соответствии с вашими требованиями

SELECT * FROM mytable ORDER BY ABS(mycol)
...