へっぽこコーダーの備忘録

phpやらjavascriptやら、使った技術をすぐに忘れちゃうから、おぼえがき程度に書いていきまーす
2015.03.17

SQL文のORDER BYで桁違いの数字がうまくならばない!!

データを金額順にソートするときにうまくいかなくて困ったので、覚書き☆

やっていた作業は、以下のような値(今回は金額でした)の昇順への並べ替えです。

金額
2300
6450
1500
3500
12000

データベースから値を取得して昇順への並べ変えだから、単純に下記のコードを書いてみました。

SELECT * FROM table_name ORDER BY price ASC

結果はこんな並びに↓

金額
12000
1500
2300
3500
6450

なんかケタを無視して頭の数字の小さい順にならんでる!

検索するとCASTを使って文字列から数字に変えればいいよって書き込みが結構あったので試してもうまくいかない><

調査を進めると、どうやら今回の問題は数字の桁が違うところにある様子。

どういう状態にすれば都合がいいかというと、こんな感じに桁を揃える。

金額
002300
006450
001500
003500
012000

じゃぁ、桁を揃えるにはどうすればいいの!?ってことで行きついたのがLPAD関数です。
LPAD(カラム名,桁数,埋める値)
って感じでかくと、カラムの値を、指定した桁数まで、指定した値で埋めてくれるようです。

今回の場合だと、このように指定しました。

LPAD(price,6,0)

SQL文としてはこんな感じですね。

SELECT * FROM table_name ORDER BY LPAD(price,6,0) ASC

すると6ケタに満たない部分を0がうめてくれるので、数字が小さい順に並んでくれて、データの並び替えもうまくいきました。