MySQL 数字をソートしたい(to_number()、(xx+0))

数値じゃなくて、数字をソートしたい

作成日:2022-01-20, 更新日:2022-01-20

基本

▼数字が「カラム: colm_foo」に格納されている場合、暗黙的に数値に変換してソート

select * from tbl_hoge order by (colm_foo + 0) desc;

to_number()

MySQLじゃないなら「to_number()」があるらしい
※どのDBで使えるかは未調査

経緯

  1. 「B12、101、301、102、B11」のような「文字列」があった
  2. 「301、101、102、B11、B12」のようにソートする必要が出てきた
  3. 使われる値のルールが単純で限られているので無理矢理設定(mysql 並び換えのルールを作りたい(order,case)
  4. 「1001」「12301」のような今までのルールでは対応できない値が入ることになった
  5. ・・・困った・・・

・・・こんな感じ。
※予め想定していても、大人の事情で対応するわけにはいかないコトもある

諸々を考慮してkey-valueのようなテーブルを用意してどうにかして対応しようってコトにした