2011-11-19 30 views
2

我有一個數據集,像這樣:MySQL的順序STRING爲INT和插入

print_id 
-------- 
2b 
1 
2 
4b 
4a 
3 
6 
2a 
5 

打印ID可以是的格式:/([0-9] +)([AE] {1} )?/

我想要的是先訂購他們的數量,如果有任何信件。如果沒有字母,那麼它是該號碼中的第一個。所以結果應該是像這樣:

print_id 
-------- 
1 
2 
2a 
2b 
3 
4a 
4b 
5 
6 

我試圖ORDER BY(print_id + 0),它正確排序的數字,但它只是不相當做的伎倆。有什麼建議麼?

回答

3

你可以有ORDER BY子句中的多個表達式:

ORDER BY print_id + 0, print_id 

這將首先嚐試將其數值排序(丟棄字母后綴),如果它們在數值相同,那麼將通過其字符串命令他們值(包括字母后綴)。對於你所描述的規則,唯一的一次會中斷,如果你有前導零;例如,此ORDER BY子句將對'01b'進行排序,高於'1a'。這可能發生在您的數據?

+0

沒有,前導零不會在我的數據會發生。因此,您的解決方案是完美的。非常感謝你。 – voldomazta

+0

不適用於postgresql – Andreas

+0

@Andreas:該問題指定MySQL。 – ruakh

0
ORDER BY print_id 

應該做你想做的。它將按字符字段print_id排序,這相當於按單個字符排序。

所以,爲表

print_id 
-------- 
1 
3a 
3c 
2b 
2c 
2a 
3b 
0 
0b 
00 

你會得到

print_id 
-------- 
0 
00 
0b 
1 
2a 
2b 
2c 
3a 
3b 
3c