Я пытаюсь сделать заказ по числовому столбцу в своей базе данных, который имеет значения 1-999
Когда я использую
ORDER_BY registration_no ASC
Я получил….
1
101
102
103
104
105
106
107
108
109
11
110
Etc…
Таким образом, похоже, что это упорядочение по первой цифре, а не по номеру.
Кто-нибудь знает, какой SQL использовать, если я хочу упорядочить это по значению? Так и 1,2,3,4,5,6
т. Д.
sql
sql-order-by
Коннор262
источник
источник
order by registration_no + 0 asc
для решения вашей проблемы.Ответы:
Один из способов упорядочить положительные целые числа, когда они хранятся как
varchar
, - это сначала упорядочить по длине, а затем по значению:Это особенно полезно, когда столбец может содержать нечисловые значения.
Примечание: в некоторых базах данных функция для получения длины строки может вызываться
length()
вместоlen()
.источник
order by
элементе мало влияет на производительность.length()
вместоlen()
явно преобразует значение в число. Еще одна возможность добиться того же:
что вызовет неявный разговор.
На самом деле вам следует проверить определение таблицы и изменить его. Вы можете изменить тип данных,
int
как этоALTER TABLE your_table MODIFY COLUMN registration_no int;
источник
Если вы используете SQL Server:
источник
дает желаемый результат с предупреждениями.
Следовательно, лучше пойти на
для чистого результата без каких-либо предупреждений SQL.
источник
Я предполагаю, что ваш тип столбца - STRING (CHAR, VARCHAR и т.д.), а процедура сортировки сортирует его как строку. Что вам нужно сделать, так это преобразовать значение в числовое значение. Как это сделать, будет зависеть от используемой вами системы SQL.
источник
Иногда у вас просто нет выбора, хранить числа вместе с текстом. В одном из наших приложений хост веб-сайта, который мы используем для нашего сайта электронной коммерции, динамически создает фильтры из списков. Нет возможности сортировать по любому полю, кроме отображаемого текста. Когда мы хотели создать фильтры на основе списка, в котором говорилось бы такие вещи, как от 2 "до 8" 9 "до 12" 13 "до 15" и т. Д., Нам нужно было отсортировать 2-9-13, а не 13-2-9, как это будет, когда чтение числовых значений. Поэтому я использовал функцию SQL Server Replicate вместе с длиной самого длинного числа, чтобы дополнить любые более короткие числа начальным пробелом. Теперь 20 сортируется после 3 и так далее.
Я работал с представлением, которое давало мне минимальную и максимальную длину, ширину и т. Д. Для типа и класса элемента, и вот пример того, как я делал текст. (LB n Low и LB n High - это нижняя и верхняя границы пяти скобок длины.)
источник
Я предпочитаю делать "ПАД" данным. MySql называет это LPAD, но вы можете сделать то же самое в SQL Server.
ORDER BY REPLACE(STR(ColName, 3), SPACE(1), '0')
Эта формула предоставит ведущие нули на основе длины столбца 3. Эта функция очень полезна в других ситуациях, кроме ORDER BY, поэтому я хотел предоставить эту опцию.
Результаты: 1 становится 001, 10 становится 010, а 100 остается прежним.
источник
Эта проблема возникает только потому, что вы объявили столбец с типом данных CHAR, VARCHAR или TEXT. Просто измените тип данных на INT, BIGINT и т. Д. Это решит проблему вашего индивидуального порядка.
источник