Как отсортировать числовые столбцы 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 десятичными разрядами. Отрегулируйте его в соответствии с вашими требованиями.

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

order by CAST(column as UNSIGNED)

Попробуй это.

SELECT * FROM table_name ORDER BY CAST(field_name as SIGNED INTEGER) ASC

Я использовал этот способ умножить его на один запрос:

ЗАКАЗАТЬ ПО колонке * 1 ASC

Пример: пользователь таблицы имеет значение со значением столбца [varchar(20)], Тогда вы можете запросить это:

SELECT * FROM пользователя ORDER BY по значению * 1

После того, как мы умножим его, MySQL будет обрабатывать его как число, но этот способ не рекомендуется для большой нагрузки.

Другие вопросы по тегам