0

データセットがあり、order by を実行すると、次のようになります。

 +------+
 |Emp_ID|
 +------+
 | E1   |
 | E10  |
 | E3   |
 | E4   |
 | E5   |
 +------+

次のクエリを実行しています。

select emp_id from employee_master_table order by emp_id

E10の代わりにE3が来るのはなぜE1ですか?

4

3 に答える 3

4

数値ではなく文字列をソートしているためです。emp_idasの標準形式を使用しているEXXX場合xは、数値を置き換えることができEcast残りを int に変換できます。

SELECT *
FROM   employee_master
ORDER  BY CAST(REPLACE(emp_id, 'E', '') AS UNSIGNED)

出力

╔════════╗
║ EMP_ID ║
╠════════╣
║ E1     ║
║ E3     ║
║ E4     ║
║ E5     ║
║ E10    ║
╚════════╝
于 2013-05-16T05:44:39.417 に答える
3

文字ベースの列がある場合、順序は NUMERICAL ではなく LEXICAL です。接頭辞 E が必要な理由はありますか? そうでない場合は、出力スクリプトに E を追加し、数字以外の文字を削除して INT フィールドに変更することをお勧めします。

于 2013-05-16T05:43:39.740 に答える