MySQLで列がNULLの場合に特定の文字列を返す方法(COALESCE関数の使い方)
MySQLでデータベースを操作していると、NULL値を含む列を扱う場面がよくあります。NULLのまま表示すると分かりづらい場合、代わりに「Not Valid(無効)」などの特定の文字列を返したいことがあります。本記事では、COALESCE関数を使ってNULL値を任意の文字列に置き換える方法を、実際のSQL例とともに解説します。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable -> ( -> Name varchar(100) -> ); Query OK, 0 rows affected (0.85 sec)
レコードの挿入
INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。ここでは、意図的にNULL値を含むレコードも追加しています。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.17 sec)
テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
+-------+ | Name | +-------+ | John | | NULL | | NULL | | David | +-------+ 4 rows in set (0.00 sec)
このように、「Name」列にはNULL値が2件含まれていることが確認できます。
COALESCE関数でNULLを特定の文字列に置き換える
列がNULLの場合に特定の文字列を返すには、COALESCE関数を使用します。COALESCEは、引数の中から最初の非NULL値を返す関数です。第1引数がNULLだった場合、第2引数で指定した文字列がそのまま返されます。
mysql> SELECT COALESCE(Name, 'Not Valid') from DemoTable;
出力結果
+-----------------------------+ | COALESCE(Name, 'Not Valid') | +-----------------------------+ | John | | Not Valid | | Not Valid | | David | +-----------------------------+ 4 rows in set (0.00 sec)
実行結果を見ると、元々NULLだった行にはすべて「Not Valid」という文字列が表示されていることがわかります。
IFNULL関数との違い
同様の処理はIFNULL関数でも実現できます。IFNULL(Name, 'Not Valid')のように書けば、NameがNULLの場合に「Not Valid」が返されます。ただし、IFNULLは引数を2つしか受け取れないのに対し、COALESCEは複数の引数を指定できるため、より柔軟な条件分岐が必要なケースではCOALESCEの方が便利です。
まとめ
MySQLでNULL値を特定の文字列に置き換えるには、COALESCE関数(またはIFNULL関数)を使用します。レポート作成やアプリケーションの画面表示などで、NULLの代わりに分かりやすい文言を表示したい場合に役立つ、覚えておきたい基本テクニックです。
-
MySQLでNULL値を特定の値に置き換える方法:IFNULL()関数の使い方
MySQLでは、IFNULL()関数を使用することで、列に含まれるNULL値を検出し、任意の特定の値に置き換えて表示することができます。この記事では、サンプルテーブルの作成からIFNULL()を使ったクエリの実行まで、具体的な手順をわかりやすく解説します。 サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成しましょう。ここでは、名前を格納する「FirstName」列を持つテーブルを定義します。 mysql> create table DemoTable1878 ( FirstName varchar(20) ); Query OK, 0 rows af
-
MySQLのNOT NULL制約とは?空にできない列の定義方法とエラーの挙動を解説
MySQLでは、列にNULL(空の値)を許可したくない場合、テーブル定義時にNOT NULL制約を指定します。NOT NULLが設定された列にNULLを挿入しようとすると、MySQLはエラーを返し、データの登録を拒否します。NOT NULL制約を持つテーブルの作成まず、Id列とLastName列をNOT NULLとして指定したテーブルを作成してみましょう。mysql> create table DemoTable1895 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20) NOT N