MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 別名でエイリアスを付ければ、結果セットの列名も自由に設定可能です。フラグの可読性向上やレポート出力の整形など、実務でも非常に役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLクエリで「Empty set」を別の値に置き換える方法

    MySQLでは、該当するレコードが存在しない場合に返されるNULL値を、COALESCE関数を使って別の値に置き換えることができます。検索結果が空になったときに、デフォルト値を表示させたい場面で非常に便利です。COALESCE関数とはCOALESCEは、引数として渡された複数の値の中から、最初にNULLではない値を返す関数です。集計関数(MAXやSUMなど)の結果がNULLになるケースでは、第2引数で指定した代替値が代わりに返されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable -> ( -&

  2. MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)

    MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599    -> (    -> Shippingdate d