2010-06-03 50 views
4

如何使用ORDER BY CASE对REGEXP进行排序?或其他选择? 我不想使用UNION。谢谢mysql自定义排序第一个alpha然后数字使用大小写

mysql> SELECT `floor_id`, `floor_number` FROM `floors`; 
+----------+--------------+ 
| floor_id | floor_number | 
+----------+--------------+ 
|  1 | 4   | 
|  2 | 7   | 
|  3 | G   | 
|  4 | 19   | 
|  5 | B   | 
|  6 | 3   | 
|  7 | A   | 
+----------+--------------+ 


Expected result: 
+----------+--------------+ 
| floor_id | floor_number | 
+----------+--------------+ 
|  7 | A   | 
|  5 | B   | 
|  3 | G   | 
|  6 | 3   | 
|  1 | 4   | 
|  2 | 7   | 
|  4 | 19   | 
+----------+--------------+ 

回答

4

您对REGEXP的使用非常接近。这应该工作:

SELECT floor_id, floor_number FROM floors ORDER BY CASE 
WHEN floor_number REGEXP '[a-zA-Z]' THEN 0 
ELSE 0+floor_number END ASC, floor_number; 

CASE声明位居字母的地板为0,并使用0+于数字地面强制转换为可订购了一批价值。然后需要第二级排序floor_number,以便字母正确地排列为A,B,G。如果没有第二级订单,字母数字地板将被视为相当于0的值,并且不会按照定义的顺序显示。

+0

好作业!求助 谢谢迈克。 – Nizzy 2010-06-03 22:16:45

相关问题