2017-07-13 207 views
2

我有一個名爲「test」的表,其中有一個名爲「custom_id」的列,可以是字母和整數的混合。我想要一個MySQL查詢首先基於整數對它進行排序,然後基於字符串中的字母。即:按數字排序記錄,然後按字母排序MySQL

Input: 
1b 
1a 
Apple5 
Apple1 
Bapple2 
Bapple5 
2a 
3 

Output (in ASC): 
1a 
1b 
Apple1 
2a 
Bapple2 
3 
Apple5 
Bapple5 

以上與自然排序有點不同,因爲它不根據字符串的長度進行排序。我有以下查詢,在MariaDB的工作,但我正在尋找一個MySQL解決方案(無程序取悅):

SELECT custom_id FROM test 
ORDER BY CAST(REGEXP_SUBSTR(custom_id,'[0-9]+') AS UNSIGNED) ASC, custom_id ASC 

回答

0

0+custom_id會給領先數的值。如果沒有前導零,那麼LENGTH(0+custom_id)會說多少剝離。使用合適的MID(...)來獲取許多字符。