Как отсортировать числовые столбцы VARCHAR по DESC или ASC?
Я пишу...
ORDER BY column ASC
но моя колонка VARCHAR
и это вроде как неправильно 1, 10, 2
, вместо 1, 2, 10
,
Как я могу сделать это, чтобы сортировать как 1, 2, 10
?
5 ответов
order by
cast(column as float)
Заметки:
- Предполагается, что у вас есть только цифры в столбцах. Нет "рыбы" или "велосипед"
- пустые строки CAST в ноль
Изменить: для MySQL. Вы не можете бросить, чтобы плавать
order by
cast(column as decimal(38,10))
Вы можете привести к int...
order by cast(column as int)
DEMO
DECLARE @q as table(
name varchar(50),
columnn varchar(10)
)
insert into @q
VALUES('one','1'),('one','10'),('one','20'),('one','3'),('one','2'),('one','20')
select * from @q order by cast (columnn as int) desc
печать
-------------------------------------------------- ----------
one 20
one 20
one 10
one 3
one 2
one 1
Итак, Даниэль, да, это работает:)
ОБНОВЛЕНИЕ:
order by cast(column as decimal(20,6))
Преобразует значения столбца в десятичные числа с максимальными 20 цифрами и 6 десятичными разрядами. Отрегулируйте его в соответствии с вашими требованиями.
Попробуй это.
SELECT * FROM table_name ORDER BY CAST(field_name as SIGNED INTEGER) ASC
Я использовал этот способ умножить его на один запрос:
ЗАКАЗАТЬ ПО колонке * 1 ASC
Пример: пользователь таблицы имеет значение со значением столбца [varchar(20)]
, Тогда вы можете запросить это:
SELECT * FROM пользователя ORDER BY по значению * 1
После того, как мы умножим его, MySQL будет обрабатывать его как число, но этот способ не рекомендуется для большой нагрузки.