2012-10-12 134 views
1

你能幫我嗎?在mysql中以字母數字排序

我的查詢是這樣的查詢

SELECT num FROM sortnum ORDER BY lpad(num, 10, 0) 

結果並不好這裏 是結果

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
1a 
2a 
2b 
A1 
A2 
A3 
A4 
B1 
A10 
A11 
B10 

,這是什麼類型的數據 的,我想數第一最佳的查詢,然後數據以a開頭,然後用b

我想要結果像

1 
1a 
2 
2a 
2b 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
A1 
A2 
A3 
A4 
A10 
A11 
B1 
B10 

在此先感謝

+0

試試吧左邊沒有留下 – xception

回答

4

假設任何字母前綴的長度將是至多一個字符,你可以這樣做:

SELECT num 
FROM  sortnum 
ORDER BY 
    CAST(num AS UNSIGNED)=0,  -- those starting with numbers before non-numbers 
    CAST(num AS UNSIGNED),  -- then by number prefix (if any) 
    LEFT(num,1),     -- then by first character 
    CAST(MID(num,2) AS UNSIGNED) -- then by remaining numbers 

看到它的sqlfiddle

+0

非常感謝,您的查詢工作 –

+0

簽名只是爲了說感謝!這工作完美。 – thatonefreeman

0
SELECT num, 
CONVERT(SUBSTRING_INDEX(num,'-',-1),UNSIGNED INTEGER) AS num 
FROM sortnum 
ORDER BY num; 
+0

不是什麼OP後:http://sqlfiddle.com/#!2/78bfb/2/0 – eggyal