如何在REGEXP时使用ORDER BY CASE对查询进行排序?或其他替代方案?我不想使用联合。谢谢
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 |
+----------+--------------+发布于 2010-06-04 06:07:42
您对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,并且不会以定义的顺序出现。
https://stackoverflow.com/questions/2969678
复制相似问题