データを金額順にソートするときにうまくいかなくて困ったので、覚書き☆
やっていた作業は、以下のような値(今回は金額でした)の昇順への並べ替えです。
| 金額 | 
|---|
| 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がうめてくれるので、数字が小さい順に並んでくれて、データの並び替えもうまくいきました。
