Как заказать MySQL VARCHAR Результаты - PullRequest
6 голосов
/ 20 февраля 2011

В операторе SELECT у меня есть столбец varchar с ORDER BY DESC. Примеры данных в этом столбце:

1234
987
12-й
13-ЧД

MySQL вернет select что-то вроде следующего:

987
12-й
1234
13-ЧД

Это помещает результаты длиной в три символа перед результатами длиной в четыре символа и так далее. Я хотел бы, чтобы он игнорировал длину и просто сортировал числа, которые идут перед символом «-». Есть ли что-то, на что я могу ЗАКАЗАТЬ, например, SUBSTRING в IF (), который удалит все данные в строке, начиная с символа '-', чтобы я мог CAST как целое число?

Ответы [ 3 ]

13 голосов
/ 20 февраля 2011

Самое простое, что нужно сделать, это

SELECT *
FROM TBL
ORDER BY VARCHAR_COLUMN * 1;

Чтобы увидеть, что происходит, просто добавьте столбец, который я использовал для заказа

SELECT *, VARCHAR_COLUMN * 1
FROM TBL
ORDER BY VARCHAR_COLUMN * 1;
0 голосов
/ 08 декабря 2011
...
....
CAST(COL as SIGNED)  DESC
0 голосов
/ 20 февраля 2011

Часть трюка имеет дело с "-": так как она необязательна, вы не можете напрямую использовать SUBSTR в этом поле (как указал Марк Б), чтобы избавиться от всего после него

Итак, трюкбыло бы: добавить «-» к значению!

Примерно так:

ORDER BY CAST(SUBSTR(CONCAT(yourfield,'-'), 0, LOCATE('-', CONCAT(yourfield,'-'))) AS UNSIGNED)

Другой полезный подход состоит в том, чтобы вместо использования SUBSTR «удалять» все после «-», замените его (и все буквы) на «0», а затем используйте CAST.

...