2012-01-24 67 views
1

我試圖列出一些產品的模型&所有模型都是字母數字。用字母數字順序排列的MySQL查詢

我試圖

ORDER BY CAST(field_name AS UNSIGNED) 

ORDER BY field_name + 0 

ORDER BY LENGTH(field_name) 

和其他一些方面。

它們適用於大多數人,但有一些值與訂單不符。

結果我得到的是像

EAG-75

EAG-110

...

ESCG-500

ESCG-600

。 ..

EYG-40

EYG-55

...

EMG-440

EMG-20

EMG-27

.. 。

EAG-100

...

我不明白是什麼原因造成這一點。

請幫忙。

在此先感謝

+0

你怎麼希望他們排序的正確數字排序,您需要將2位分別排序?舉個例子。如果您按字母順序排列,EAG-110出現在EAG-75 –

+0

之前,我希望它們可以像EAG-75,EAG-100,EAG-110,EMG-20一樣進行字母數字排序...... –

+0

@Onur:我想你實際上的意思是「每個非數字前綴,按數字排序」 – gbn

回答

5

如果你想每個非數字前綴

ORDER BY 
    -- sort by prefix only 
    LEFT(MyCol, INSTR(col, '-')-1), 
    -- sort numerically within prefix 
    CAST(SUBSTRING(MyCol, INSTR(col, '-')+1) AS UNSIGNED) 
+0

非常感謝,我真的很感激它 –

+0

只要所有的型號數字格式爲AAA - ##,你不會得到比這個解決方案好得多。 – Sam

+0

嗨,它的格式完美,但如果在同一個查詢中有像AAAA#這樣的其他結果,那麼對於4個字符的結果它不能很好地工作,我該如何解決它?在此先感謝 –

0

ORDER BY LENGTH(field_name), field_name工作更好地爲您?