Mysql 如何按DESC或ASC对varchar数值列进行排序?

Mysql 如何按DESC或ASC对varchar数值列进行排序?,mysql,sql-order-by,natural-sort,Mysql,Sql Order By,Natural Sort,我写 ORDER BY column ASC 但是我的列是VARCHAR,它排序错误,比如1,10,2,而不是1,2,10 我如何进行排序,如1、2、10?您可以将其转换为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

我写

ORDER BY column ASC
但是我的列是
VARCHAR
,它排序错误,比如
1,10,2
,而不是
1,2,10

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

您可以将其转换为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位小数的十进制数。根据您的实际需求进行调整

order by 
   cast(column as float)
注:

  • 假设列中只有数字。没有“鱼”或“自行车”
  • 空字符串强制转换为零
编辑:对于MySQL

我用这种方式 将其乘以一,查询为:

按列名称排序*1 ASC

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

按值*1从用户订单中选择*

在我们将它相乘之后,MySQL将把它当作一个数字来处理,但对于重载,不建议使用这种方法。

尝试以下方法:

order by CAST(column as UNSIGNED)

“它排序错误”:实际上这是VARCHAR列的正确排序。您需要将值转换为数字类型。您使用的是什么数据库和版本?列中有小数还是只有整数?对不起,我不知道如何检查DB versionAlways 2位小数?在处理字符串数据时,这称为“自然排序”,SQL不支持这种排序。有一些特定于数据库的方法可以执行“自然排序”,并复制已经解决了这个问题的问题……我看到您的答案出现和消失了,呵呵;)例如,如果你的意思是。。。“按演员顺序(列为int)DESC”,很抱歉没有work@Daniel:然后提供更好的示例数据和架构位置。这将与integers@Daniel再次检查我的答案。提供了一个例子。@Daniel好吧,您需要使用列的名称而不是“列”这个词。顺便说一句:我知道FLOAT最多使用7个字符。。。比如999.99,但也有可能more@Daniel你这是什么意思?当然,它给了我们一些东西。您知道您需要在订单前面选择etc吗?@Daniel:float是15位有效数字。真的是7。在发布$table=mysql_查询之前,很容易在MSDN上进行检查(“从my_表中选择*,状态='go'按类型排序(金额为浮动)DESC LIMIT 10”);如果SQL语法有错误,则不显示任何内容;查看与MySQL服务器版本对应的手册,了解第1行“float)DESC LIMIT 10”附近使用的正确语法。我不知道为什么它没有投票权,而事实上它工作得非常好。有人能解释吗?
order by CAST(column as UNSIGNED)