特定のカラムにNULLが格納されているとき、特定の値を指定したいケースがあります。そのようなとき「 IFNULL関数」「COALESCE関数」が役立ちます。ここでは、「 IFNULL関数」「COALESCE関数」について紹介します。
目次
動作確認用レコード
以下テーブルで動作確認をします。
mysql> SELECT * FROM `test`;
+----+------+------+------+------+
| id | v1 | v2 | v3 | v4 |
+----+------+------+------+------+
| 1 | 1 | NULL | NULL | NULL |
| 2 | NULL | 2 | NULL | NULL |
| 3 | NULL | NULL | 3 | NULL |
| 4 | NULL | NULL | NULL | 4 |
| 5 | NULL | NULL | NULL | NULL |
+----+------+------+------+------+
5 rows in set (0.00 sec)
IFNULL関数
IFNULL関数を利用すると、第1引数に指定した内容がNULLのとき、第2引数の値を返します。
以下、実行例です。
mysql> SELECT IFNULL(`v1`, 9999)
-> FROM `test`;
+--------------------+
| IFNULL(`v1`, 9999) |
+--------------------+
| 1 |
| 9999 |
| 9999 |
| 9999 |
| 9999 |
+--------------------+
5 rows in set (0.00 sec)
COALESCE関数
まず、実行例を見せます。
mysql> SELECT COALESCE(`v1`, `v2`, `v3`, `v4`, 9999)
-> FROM `test`;
+----------------------------------------+
| COALESCE(`v1`, `v2`, `v3`, `v4`, 9999) |
+----------------------------------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 9999 |
+----------------------------------------+
5 rows in set (0.00 sec)
複数の引数を指定しています。指定した引数のうち、最初に見つかった NULL以外の値
を返します。
mysql> SELECT COALESCE(`v1`, `v2`, `v3`, `v4`) FROM `test`;
+----------------------------------+
| COALESCE(`v1`, `v2`, `v3`, `v4`) |
+----------------------------------+
| 1 |
| 2 |
| 3 |
| 4 |
| NULL |
+----------------------------------+
5 rows in set (0.00 sec)
上記、最後のレコードのように NULL以外の値
が存在しない場合、NULLになります。