如何通过DESC或ASC对varchar数字列进行排序?

时间:2011-10-16 17:48:28

标签: mysql sql-order-by natural-sort

我写...

ORDER BY column ASC

但我的专栏是VARCHAR,而且排序错误,如1, 10, 2,而不是1, 2, 10

如何进行排序,如1, 2, 10

4 个答案:

答案 0 :(得分:9)

order by 
   cast(column as float)

注意:

  • 假设您的列中只有数字。没有“鱼”或“自行车”
  • 空字符串CAST为零

编辑:对于MySQL。 You can not cast to float

order by 
   cast(column as decimal(38,10))

答案 1 :(得分:3)

你可以转换为int ...

order by cast(column as int)

<强>样本

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位的十进制数。根据您的实际需求进行调整。

答案 2 :(得分:1)

我用这种方式 将它与一个查询相乘:

  

ORDER BY columnname * 1 ASC

示例:表用户具有列值[varchar(20)]的值。 然后你可以查询它:

  

SELECT * FROM user ORDER BY value * 1

在我们相乘之后 MySQL 会将其视为一个数字,但不建议这种方式用于繁重的负载。

答案 3 :(得分:1)

试试这个:

order by CAST(column as UNSIGNED)