SQL УПОРЯДОЧИВАЕТ символы численно
-
20-08-2019 - |
Вопрос
У меня есть столбец чисел, хранящихся в виде символов.Когда я делаю ЗАКАЗ ПО для этого столбца, я получаю следующее:
100
131
200
21
30
31000
и т.д.
Как я могу упорядочить эти символы численно?Нужно ли мне что-то конвертировать или для этого уже есть SQL-команда или функция?
Спасибо.
Решение
Попробуй это:
ORDER BY CAST(thecolumn AS int)
Другие советы
Это сработало для меня:
ORDER BY ABS(column_name)
Это проблема с упорядочением числовых строк в "естественной сортировке" (если вы поищете "естественную сортировку" в Google, вы найдете массу всего).По сути, приведение строки как int и сортировка по результирующему значению должны это исправить.
Причина этого заключается в том, что с типом данных char вы сортируете строки как строку.
Идея состоит в том, чтобы ORDER BY CAST()
является правильным, однако производительность этого будет снижаться по мере увеличения количества возвращаемых результатов.
Если в этом столбце представлены только числовые данные, то наилучшей практикой было бы найти подходящий числовой тип данных и изменить его.
Если вы действительно не можете изменить столбец и у вас возникают проблемы с производительностью, я предлагаю создать столбец порядка сортировки, который содержит значение, приведенное к целому числу (будут ли нули преобразованы в соответствующее значение).
Проиндексируйте столбец порядка сортировки и, в идеале, добавьте триггер в столбец CHAR, чтобы вставки или обновления значения char запускали обновление целочисленного значения.
В некоторых ситуациях это может быть хорошим совпадением:
ORDER BY LENGTH(column_name), column_name
Особенно, если у вас есть столбец либо со всеми цифрами, либо с сочетанием букв и цифр, но все одинаковой длины.