mysql varchar排序
我有一个VARCHAR行,其值如下:“1,11,2,6,2A,10,6B” 如何按顺序选择它们:1、2、2A、6、6B、10、11 尝试了简单的SQL查询,但无效mysql varchar排序,mysql,sql,Mysql,Sql,我有一个VARCHAR行,其值如下:“1,11,2,6,2A,10,6B” 如何按顺序选择它们:1、2、2A、6、6B、10、11 尝试了简单的SQL查询,但无效 SELECT * FROM clients ORDER BY id 你要找的是 您的SQL查询应该如下所示: SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id 您可以使用转换 这将首先按数字排序,然后按字母排序(否则不能保证有1、1A、1B等) 借用前面的答案,在OR
SELECT * FROM clients ORDER BY id
你要找的是 您的SQL查询应该如下所示:
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
您可以使用
转换
这将首先按数字排序,然后按字母排序(否则不能保证有1、1A、1B等)
借用前面的答案,在ORDER
子句中将列强制转换为数字表达式是对字符字段中的值进行数字排序的常见解决方案
部分解决方案
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL)
但是,此解决方案通常是针对严格的数值实现的。由于您的值是数字和字母的混合体,所以这种解决方案是不够的。如果您的值的前导小数部分相同,例如2
、2A
和2B
,则它们可以按任意顺序出现
完整解决方案
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL)
因此,一旦值按数字顺序排列,就应该按照标准(词典)顺序进一步排列:
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
它怎么不起作用?因为对于您发布的示例数据,我希望它应该是。(当然,假设id
是您要排序的行的名称。)@bdares:no,它可以1,10,11,2,2A,6,6B
我确信MySQL可以按词汇排序,这似乎是他想要的。@bdares他也需要十进制排序,如果只是按词汇排序的话,1
后面是11
而不是2
@b战神,如果是这样的话,他可能会提到它,但只要他对我的解决方案满意,就不需要其他任何东西。有了这个解决方案,“2A、2B和2C”将如何订购?它们不会。对于这种情况,还有另一种不同的解决方案。结束。这在mysql中也起作用:selectid-fromclientorderbyid*1,id
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id