Вопрос

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top