0

VARCHARさまざまな文字列の長さとフォーマットされた値を含む製品コード フィールドで自然な並べ替えを実現できるようにする MySQL クエリを作成しようとしています。

スタック オーバーフローを検索して見つかった多くの手法を試しましたが、シナリオで機能するものはありません。

product_code(サンプルデータ)

BA112
BA113
BA27
BA12
112
998
BA113[1]
BA113[2]

次のように並べ替える必要があります。

112
998
BA12
BA27
BA112
BA113
BA113[1]
BA113[2]

何かご意見は?

4

3 に答える 3

0

私が今見つけることができる唯一の答えは、最初に文字列の長さで並べ替え、次に英数字で並べることです:

ORDER BY CHAR_LENGTH(product_code), product_code

でもあなたのBA27は本当に「BA」と「27」のようなもので、最初にアルファベット、次に数字で並べたいと思いますよね?

その場合は、アルファベット部分と数字部分を別のフィールドに格納する必要があります。

CHAR_LENGTH()マルチバイト文字 ("Ñ" や "¿" など) があるため、特に UTF エンコーディングを使用している場合は、MySQL 関数を使用することを忘れないでください。

于 2013-05-15T14:27:14.740 に答える
0

これを試して:

sample_data order by (concat(space(10-length(product_code)),product_code)) ascからproduct_codeを選択

重要な部分は(連結...

すべての値を 10 文字の長さにし、左側にスペースを埋め込みます。

于 2013-05-15T14:52:28.130 に答える