SQL ORDER показывает численно - PullRequest
35 голосов
/ 29 января 2009

У меня есть столбец чисел, хранящихся в виде символов. Когда я делаю ORDER BY для этого столбца, я получаю следующее:

100
131
200
21
30
31000
и т.д.

Как я могу заказать эти символы численно? Нужно ли что-то преобразовывать или для этого уже есть команда или функция SQL?

Спасибо.

Ответы [ 5 ]

72 голосов
/ 29 января 2009

Попробуйте это:

ORDER BY CAST(thecolumn AS int)
22 голосов
/ 19 декабря 2011

Это сработало для меня:

ORDER BY ABS(column_name)
2 голосов
/ 29 января 2009

Это проблема с упорядочением числовых строк в "натуральной сортировке" (если вы посмотрите "натуральную сортировку" в Google, вы найдете тонны вещей). По сути, приведение строки к типу int и сортировка по полученному значению должны исправить это.

1 голос
/ 18 декабря 2018

В некоторых ситуациях это может быть хорошим совпадением:

ORDER BY LENGTH(column_name), column_name

Особенно, если у вас есть столбец со всеми цифрами или набором букв и цифр, но все одинаковой длины.

1 голос
/ 29 января 2009

Причина в том, что с типом данных char вы сортируете строки в виде строки.

Идея ORDER BY CAST() верна, однако производительность будет снижаться по мере увеличения числа возвращаемых результатов.

Если в этом столбце указаны только числовые данные, рекомендуется найти подходящий тип числовых данных и изменить его.

Если вы действительно не можете изменить столбец и у вас возникают проблемы с производительностью, я предлагаю иметь столбец порядка сортировки, содержащий значение, приведенное к целому числу (нули будут преобразованы в соответствующее значение).

Индексируйте столбец порядка сортировки и, в идеале, добавьте триггер к столбцу CHAR, чтобы вставки или обновления значения char инициировали обновление целочисленного значения.

...