コードのリストがあります:
1A
1B
1C
2A
2B
2C
.....
10A
10B..
11A
11B..
...
しかし、並べ替えると、次の順序になります (リストを短くするために、リストからいくつかの値を削除しました)。
10A
10A
10B
10B
11A
11A
1A
1A
1B
1B
1C
2B
2B
2B
2B
2C
リストを数値とアルファベットの適切な順序 (昇順) で並べ替えるにはどうすればよいですか?
このようなことができるとは知りませんでしたが、次のようになります。
SELECT code
FROM YourTable
ORDER BY Convert(code, unsigned), code
あなたのコードが常に数字の後に1文字だけ続く場合、次のように動作するはずです...
SELECT code FROM table ORDER BY LENGTH(code), code
mysql はそのような「自然な」ソートを直接サポートしていませんが、より複雑な order by 句を使用して偽造することができます。ただし、mysql には、これらの文字列の数値/アルファ分割がどこにあるかを見つけることができるキャプチャ正規表現がないため、物事を適切に分割できるものを書くのはひどく醜いです。
SELECT ugly_split_function1(yourfield) AS alpha, ugly_splitfunction2(yourfield) AS numeric
....
ORDER BY numeric, alpha
最善の解決策は、そのフィールドを 2 つの別々のフィールドに分割して、個々のフィールドで直接ソートできるようにすることです。