MySQLでSELECT結果の値を置き換える方法|CASE式を使った変換テクニック
MySQLでは、SELECT文で取得した数値(0や1など)を、そのまま表示する代わりに「true」「false」などの分かりやすい文字列に置き換えて出力できます。このような場合に活用できるのがCASE式です。
CASE式を使った置き換えの基本構文
基本となる構文は以下の通りです。条件に一致した場合は指定した値を返し、一致しない場合はELSE句の値を返します。
select yourColumnName1,yourColumnName2,...N, case when yourColumnName=1 then 'true' else 'false' end as anyVariableName from yourTableName;
それでは、実際の例を見ながら理解を深めていきましょう。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成します。ここでは、年齢が18歳以上かどうかを示すフラグを持つテーブルを用意します。
mysql> create table selectReturnDemo -> ( -> Id int, -> Name varchar(100), -> isGreaterthan18 tinyint(1) -> ); Query OK, 0 rows affected (0.62 sec)
テーブルが作成できたら、INSERT文でサンプルデータを挿入します。
mysql> insert into selectReturnDemo values(1,'Carol',0); Query OK, 1 row affected (0.23 sec) mysql> insert into selectReturnDemo values(2,'Bob',1); Query OK, 1 row affected (0.21 sec) mysql> insert into selectReturnDemo values(3,'Mike',1); Query OK, 1 row affected (0.18 sec) mysql> insert into selectReturnDemo values(4,'David',0); Query OK, 1 row affected (0.21 sec) mysql> insert into selectReturnDemo values(5,'Adam',1); Query OK, 1 row affected (0.10 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from selectReturnDemo;
実行結果は以下のようになります。フラグ列「isGreaterthan18」には0と1が格納されています。
+------+-------+-----------------+ | Id | Name | isGreaterthan18 | +------+-------+-----------------+ | 1 | Carol | 0 | | 2 | Bob | 1 | | 3 | Mike | 1 | | 4 | David | 0 | | 5 | Adam | 1 | +------+-------+-----------------+ 5 rows in set (0.00 sec)
CASE式で値を置き換えて取得する
ここからが本題です。CASE式を使うことで、0と1のフラグ値を「false」と「true」に置き換えて表示できます。
mysql> select Id,Name, -> case when isGreaterthan18=1 then 'true' -> else 'false' -> end as AgeIsGreaterthan18 -> from selectReturnDemo;
実行結果は次の通りです。元のテーブルのデータを変更することなく、取得時の表示だけを置き換えられているのが分かります。
+------+-------+--------------------+ | Id | Name | AgeIsGreaterthan18 | +------+-------+--------------------+ | 1 | Carol | false | | 2 | Bob | true | | 3 | Mike | true | | 4 | David | false | | 5 | Adam | true | +------+-------+--------------------+ 5 rows in set (0.00 sec)
まとめ
このように、CASE式をSELECT文に組み込めば、格納されている生の値を変更せずに、クエリ実行時の出力だけを任意の値に変換できます。end as 別名でエイリアスを付ければ、結果セットの列名も自由に設定可能です。フラグの可読性向上やレポート出力の整形など、実務でも非常に役立つテクニックなので、ぜひ覚えておきましょう。
-
MySQLクエリで「Empty set」を別の値に置き換える方法
MySQLでは、該当するレコードが存在しない場合に返されるNULL値を、COALESCE関数を使って別の値に置き換えることができます。検索結果が空になったときに、デフォルト値を表示させたい場面で非常に便利です。COALESCE関数とはCOALESCEは、引数として渡された複数の値の中から、最初にNULLではない値を返す関数です。集計関数(MAXやSUMなど)の結果がNULLになるケースでは、第2引数で指定した代替値が代わりに返されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable -> ( -&
-
MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)
MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599 -> ( -> Shippingdate d