2017-05-08 44 views
0

我需要排序查询的结果由varchar可能包含数字,但也可以事先排序其他字段。排序varchar数字时也排序其他字段

说我的表如下所示:

+------------------------+-----------------+ 
| AnotherField   | VarCharWithNums | 
+------------------------+-----------------| 
| Same Data in Every Row | Numbers 5-10 | 
| Same Data in Every Row | Numbers 10-13 | 
| Same Data in Every Row | Numbers 13-15 | 
+------------------------+-----------------| 

这个查询:

SELECT VarCharWithNums, AnotherField 
FROM MyTable 
ORDER BY CAST(VarCharWithNums AS UNSIGNED) ASC 

给了我这样的:

+------------------------+-----------------+ 
| AnotherField   | VarCharWithNums | 
+------------------------+-----------------| 
| Same Data in Every Row | Numbers 5-10 | 
| Same Data in Every Row | Numbers 10-13 | 
| Same Data in Every Row | Numbers 13-15 | 
+------------------------+-----------------| 

这个查询:

SELECT VarCharWithNums, AnotherField 
FROM MyTable 
ORDER BY AnotherField ASC, CAST(VarCharWithNums AS UNSIGNED) ASC 

给了我这样的:

+------------------------+-----------------+ 
| AnotherField   | VarCharWithNums | 
+------------------------+-----------------| 
| Same Data in Every Row | Numbers 10-13 | 
| Same Data in Every Row | Numbers 5-10 | 
| Same Data in Every Row | Numbers 13-15 | 
+------------------------+-----------------| 

不要紧,重点是什么,我给的字段ORDER BY子句中,它从来没有正确排序VarCharWithNums当我为了它与其他领域。

+0

http://stackoverflow.com/questions/5417381/mysql-sort-string-number –

+0

您可能需要解析出该字段以获取只有一个数字,并使用它进行排序(或两个,取决于你如何想要对范围进行排序) –

+0

如果'AnotherField'的每一行都有相同的数据,为什么要对它进行排序?或者这只是人为的例子的一部分?当我设置测试用例并尝试时,我没有任何问题。 –

回答

0

你在你的最后一段提到这个问题,但真正在你已经证明什么的唯一错误是,让你描述的那种,CAST(VarCharWithNums AS UNSIGNED) ASC需要是第一件事ORDER BY子句。它应该可以工作,并且在我的机器上创建一个人为设计的例子时它就可以工作。