データセットがあり、order by を実行すると、次のようになります。
+------+
|Emp_ID|
+------+
| E1 |
| E10 |
| E3 |
| E4 |
| E5 |
+------+
次のクエリを実行しています。
select emp_id from employee_master_table order by emp_id
E10
の代わりにE3
が来るのはなぜE1
ですか?
数値ではなく文字列をソートしているためです。emp_id
asの標準形式を使用しているEXXX
場合x
は、数値を置き換えることができE
、cast
残りを int に変換できます。
SELECT *
FROM employee_master
ORDER BY CAST(REPLACE(emp_id, 'E', '') AS UNSIGNED)
出力
╔════════╗
║ EMP_ID ║
╠════════╣
║ E1 ║
║ E3 ║
║ E4 ║
║ E5 ║
║ E10 ║
╚════════╝
文字ベースの列がある場合、順序は NUMERICAL ではなく LEXICAL です。接頭辞 E が必要な理由はありますか? そうでない場合は、出力スクリプトに E を追加し、数字以外の文字を削除して INT フィールドに変更することをお勧めします。