2010-06-03 51 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

相關問題