Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql varchar排序_Mysql_Sql - Fatal编程技术网

mysql varchar排序

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

我有一个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等)


借用前面的答案,在
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