Entries

MySQLのソート

MySQLでvarchar型のカラムに数値だけ入ってる時、普通にソートすると

mysql> SELECT id, value FROM test ORDER BY value;

idvalue
21
110
42
53
35

こんな感じで当然文字列としてソートされます。
valueをCASTで数値にしてソートすると数字順に並びます。

mysql> SELECT id, value FROM test ORDER BY CAST(value AS signed);

idvalue
21
42
53
35
110

CASTを使わずに ORDER BY に +0 を加えるだけでも数値としてソートされます。

mysql> SELECT id, value FROM test ORDER BY value + 0;

idvalue
21
42
53
35
110

ちなみにMySQLのソートといえば、

idpriority
11
21
31
41
51
61
71
81
91

上記のようなテーブルをpriorityカラムでソートすると、

mysql> SELECT * FROM test ORDER BY priority;

idpriority
11
21
31
41
51
61
71
81
91

暗黙の了解でpriorityとidによってソートされるんですが、レコード数が10個以上になると突然その法則が崩れてしまいます。。

mysql> SELECT * FROM test ORDER BY priority;

idpriority
11
91
81
71
61
51
41
31
21
101

これを回避するには ORDER BY priority, id というように id を明示しなければなりません。
ENGINEがMyISAMでもInnoDBでも同じです。

mysql> SELECT * FROM test ORDER BY priority, id;

idpriority
11
21
31
41
51
61
71
81
91
101

この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://cuio.blog2.fc2.com/tb.php/2042-d53f8465

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

jin

  • Author: jin
  • 横浜市 → Sunnyvale → Irvine → 目黒区