varchar形をソート
2009/03/05 | MySQL
いつもよく使うMySQL。特定カラムでソートするときのTipsというか備忘録。
本来は数値で入力しておくべきカラムなのだが、わがままなクライアントが時として文字列を入力したいということがあるので、とりあえずvarchar型を採用することにしたのが、そのカラムでソートする必要が出てきてしまった。
SELECT * FROM myTable ORDER BY myColumn DESC;
普通にこんな風に描いてみたけど問題が出た。たいていの場合、そこには二桁の数字が入るのだけれど、まれに三桁の数字が入ることがある。そのときに期待通りに並ばない。例えば90と100という”文字列”が入っていたときに、上記のSQLなら100のほうが上位になってほしいのに下位になってしまうのだ。文字列で判断しているわけだから最初の文字「9」と「1」で判断して、そういう結果になるのは当たり前なのだが・・・、100のほうが上位になってほしい。
そんなときに使用する関数(MySQLの)がCASTだ。名前のとおり型変換(型のキャスト)をしてくれる関数だ。上記のSQLを以下のように書き換えてうまく動作してくれた。
SELECT * FROM myTable ORDER BY CAST(myColumn as signed) DESC;
すっきり。でもこれ、行数が多いと時間かかりそう。
2010/08/31 at 6:41 PM
varchar型のソートで悩んでいました。大変参考になりました。