Как отсортировать числовые столбцы VARCHAR по DESC или ASC? - PullRequest
2 голосов
/ 16 октября 2011

пишу ...

ORDER BY column ASC

но мой столбец VARCHAR и сортируется неправильно, как 1, 10, 2 вместо 1, 2, 10.

Как мне сделать сортировку как 1, 2, 10?

Ответы [ 4 ]

9 голосов
/ 16 октября 2011
order by 
   cast(column as float)

Примечания:

  • Предполагается, что у вас есть только цифры в столбцах. Никаких "рыб" или "велосипедов"
  • пустые строки CAST в ноль

Редактировать: для MySQL. Вы не можете разыграть на плаву

order by 
   cast(column as decimal(38,10))
3 голосов
/ 16 октября 2011

Вы можете привести к 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

Итак, Даниэль, да, это работает:)

UPDATE

order by cast(column as decimal(20,6))

Преобразует значения столбцов в десятичные числа с максимальными 20 цифрами и 6 знаками после запятой. Отрегулируйте его в соответствии с вашими требованиями.

1 голос
/ 21 сентября 2016

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

order by CAST(column as UNSIGNED)
1 голос
/ 29 августа 2014

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

ORDER BY имя столбца * 1 ASC

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

SELECT * FROM user ORDER BY value * 1

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

...