ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【MySQL】数字を含む文字列の数字だけでソートする SQL

MySQL で数字を含む文字列の数字部分だけでソートする SQL を書いたのでメモです。

やりたいこと

log_1, log_2 のような文字列 + 数字の値を持つカラムで数字順にソートしたい場面がありました。
末尾の数字が1桁のみであればそのままソートできたと思いますが、log_10 など2桁の値もあり変換の必要がありました。
※数値が2桁の場合は log_1, log_10, log_2 のような順番になってしまうため

数字部分のみ抜き出す

下記2点を行えばカラムが数値になりソートができます。

  • REPLACE関数で数字部分のみを抜き出し
  • CAST関数で抜き出された数字を整数型に変換
SELECT
CAST(
    str_name like 'log_%' THEN REPLACE(str_name, 'log_', '')  -- 条件に一致する文字列を数値のみに置換する
    AS SIGNED -- 整数に変換
) AS log_no
FROM log_table
WHERE ... -- 形式の異なるデータを除外する条件
OREDER BY log_no;

感想

変換してソートできるようにするというのは割と使う場面が多い書き方かなと思いました。
そういえばCASE文で条件ごとにランク付けしてソートするような SQL を書いたのでうっすらでも覚えているうちに記事にしておきたいです。