2012-01-24 8 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より良い仕事?

関連する問題