我有VARCHAR行,其值如:" 1,11,2,6,2A,10,6B和#34; 如何选择它们如:1,2,2A,6,6B,10,11?
尝试过简单的SQL查询,但这不起作用。
SELECT * FROM clients ORDER BY id
答案 0 :(得分:3)
您可以使用CONVERT
。
首先按数字排序,然后按字母排序(否则你不能保证有1,1A,1B等)
SELECT id FROM clients ORDER BY CONVERT(id, UNSIGNED), id
答案 1 :(得分:2)
您要找的是CAST
。
CAST(expr AS type)
您的SQL查询应如下所示:
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id
答案 2 :(得分:2)
借用之前的答案,将列转换或转换为ORDER
子句中的数值表达式是在字符字段中以数字顺序排序值的常用解决方案。
部分解决方案
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL)
但是,此解决方案通常是针对严格的数值实现的。由于您的值是数字后跟字母的混合,因此此解决方案是不够的。如果您有前导小数部分相同的值,例如2
,2A
和2B
,则它们可以按任何顺序出现。
完整解决方案
因此,一旦数值按数字排序,应按标准(词典)排序进一步订购:
SELECT * FROM clients ORDER BY CAST(`id` AS DECIMAL), id