ORDER」タグアーカイブ

MySQLで数字のソート

MySQLを使っていて抽出したデータを並び替えるというのはごく一般的に使われると思います。
例えば、INT型のカラム名Aというものを昇順にならび替える場合はSQL文に
「 ORDER BY A 」と追記してあげれば正常な結果が出てきます。
ただ、私の場合はVARCHAR型のカラム名Bのデータを昇順に並び替える必要が出てきたことがあります。
単純にORDER句を使えば正常な結果が出てくるのですが、そのBに入っているデータは数字であったり文字であったりしています。
例えば、「第1号」とか「第234号」とか。
この並び替えをORDER句を使って実行すると先頭からの文字でソートされてしまいます。
1「第1号」
2「第11号」
3「第111号」
4「第2号」
という感じです。
これを、番号順に並び替えるにはどうすればいいか。

答えは、桁数順→数字順とすれば正常に抽出されます。
SQL文では「SELECT * FROM table ORDER BY LENGTH(B)、B」
という感じです。
LENGTHでカラムBの文字数順に並び替えてくれます。

ただ、一点未解決の部分がありまして、「第10−1号」の場合はどうするか?
これは、PHP側でデータを取り込む際もしくは、抽出したデータを再度並び替えすることで対応しました。