2016-12-15 58 views
1

我有我的表此列與貨架名字列MySQL的順序用字母和數字

M2-8-3 
N1-12-1 
N1-3-8 
N2-6-1 
O1-11-3 
O2-1-5 
O2-10-1 
O2-10-2 
O2-10-6 
O2-16-7 
O2-17-6 
O2-17-7 
O2-4-2 

當我命令由它上升它給出結果之上,但明顯我怎麼能寫的查詢來獲取結果如下

M2-8-3 
N1-3-8 
N1-12-1 
N2-6-1 
O1-11-3 
O2-1-5 
O2-4-2 
O2-10-1 
O2-10-2 
O2-10-6 
O2-16-7 
O2-17-6 
O2-17-7 

的差異可見是在N1-3-8位置和O2-4-2

+0

讓我澄清。設想3個字符串組件,1 = CHAR,2 = INT,3 = INT。按1排序,然後是2,然後是3,是嗎? – JohnHC

+2

只是將其分成3部分,將第二和第三部分轉換爲數字並按第1部分,第2部分,第3部分進行排序,或者使用字符串函數來格式化具有前導零的數字,並按格式化的表達式排序 –

回答

1

試試這個:

SELECT col 
FROM yourTable 
ORDER BY SUBSTRING_INDEX(col, '-', 1), 
     SUBSTRING(SUBSTRING_INDEX(col, '-', -2), 
        1, 
        INSTR(SUBSTRING_INDEX(col, '-', -2), '-') - 1), 
     SUBSTRING_INDEX(col, '-', -1) 

這是蠻力的方法,其中每個ORDER BY子句中的三個詞的對應於你的複姓字符串的一部分。

0

這可能是一個稍微簡單方法:

order by substring_index(col, '-', 1), 
     substring_index(col, '-', -2) + 0, 
     col 

這結束了中間部分轉換成數字用於排序目的。