MySQLでNULLを0に変換する方法|IFNULL関数の使い方を解説
MySQLでNULLを0に変換する方法
MySQLでは、IFNULL()関数を使うことで、NULL値を0(または任意のデフォルト値)に置き換えて取得できます。集計処理やアプリケーション側でのNULLチェックを省きたい場合に非常に便利な機能です。
IFNULL()関数の基本構文
SELECT IFNULL(カラム名, 0) AS 別名 FROM テーブル名;
IFNULL()は、第1引数の値がNULLでなければその値をそのまま返し、NULLであった場合には第2引数で指定した値を返します。
サンプルテーブルの作成
まず、動作を確認するためのテーブルを作成しましょう。
mysql> CREATE TABLE TypecastDemo
-> (
-> AccountNumber INT
-> );
Query OK, 0 rows affected (0.84 sec)
NULLを含むレコードの挿入
次に、NULL値を含む複数のレコードを挿入します。
mysql> INSERT INTO TypecastDemo VALUES(NULL);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO TypecastDemo VALUES(1234);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO TypecastDemo VALUES(9876);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO TypecastDemo VALUES(6666);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO TypecastDemo VALUES(NULL);
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO TypecastDemo VALUES(NULL);
Query OK, 1 row affected (0.36 sec)
mysql> INSERT INTO TypecastDemo VALUES(3214);
Query OK, 1 row affected (0.34 sec)
挿入したレコードの確認
SELECT文ですべてのレコードを表示してみます。
mysql> SELECT * FROM TypecastDemo;
実行結果は以下のとおりです。
+---------------+
| AccountNumber |
+---------------+
| NULL |
| 1234 |
| 9876 |
| 6666 |
| NULL |
| NULL |
| 3214 |
+---------------+
7 rows in set (0.00 sec)
このように、AccountNumberカラムにはNULLが3件含まれていることがわかります。
IFNULL()でNULLを0に変換する
それでは、先ほど紹介した構文を使って、NULLを0に変換して取得してみましょう。
mysql> SELECT IFNULL(AccountNumber, 0) AS TypeCastNullToZero FROM TypecastDemo;
実行結果は以下のとおりです。
+--------------------+
| TypeCastNullToZero |
+--------------------+
| 0 |
| 1234 |
| 9876 |
| 6666 |
| 0 |
| 0 |
| 3214 |
+--------------------+
7 rows in set (0.00 sec)
NULLだった行がすべて「0」に置き換えられて表示されました。なお、IFNULL()による変換はあくまで取得時の表示を変えるだけであり、元のテーブルのデータが書き換えられるわけではないので安心して利用できます。
複数カラムを扱う場合はCOALESCE()も便利
複数のカラムの中から、最初に見つかった非NULLの値を取得したい場合は、COALESCE()関数が便利です。IFNULL()が引数を2つしか取れないのに対し、COALESCE()は任意の数の引数を指定できます。
SELECT COALESCE(カラムA, カラムB, カラムC, 0) AS 結果 FROM テーブル名;
この例では、カラムAがNULLならカラムB、それもNULLならカラムCという順に評価され、すべてNULLだった場合のみ0が返されます。
まとめ
- NULLを0に変換して取得するには IFNULL(カラム名, 0) を使う
- IFNULL()は引数を2つ取り、第1引数がNULLの場合に第2引数の値を返す
- 3つ以上のカラムや値を優先順位付きで評価したい場合は COALESCE() が便利
-
MySQLでNULL値を1として表示・更新する方法
MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを
-
MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法
MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl