COALESCE()関数を使ってMySQLのNULLを0に変換する方法
COALESCE()関数とは?NULLを0に変換できる理由
MySQLでは、COALESCE()関数を使うことで、NULL値を0に変換できます。COALESCE()は、引数の中から最初のNULL以外の値を返すという性質を持つ関数です。そのため、第1引数に対象のカラム、第2引数に代替値の0を指定すれば、NULLだった場合だけ0が返される仕組みになります。
基本構文は以下の通りです。
SELECT COALESCE(yourColumnName, 0) AS anyAliasName FROM yourTableName;
それでは、実際にサンプルテーブルを作成しながら動作を確認していきましょう。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成します。「Id」「Name」「Salary」の3つのカラムを持つシンプルな構成です。
mysql> create table convertNullToZeroDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Salary int
-> );
Query OK, 0 rows affected (1.28 sec)
テストデータの挿入
次に、INSERT文でレコードを追加します。あえてSalaryにNULLを含むデータを混ぜておくのがポイントです。
mysql> insert into convertNullToZeroDemo(Name,Salary) values('John',NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into convertNullToZeroDemo(Name,Salary) values('Carol',5610);
Query OK, 1 row affected (0.10 sec)
mysql> insert into convertNullToZeroDemo(Name,Salary) values('Bob',NULL);
Query OK, 1 row affected (0.15 sec)
mysql> insert into convertNullToZeroDemo(Name,Salary) values('David',NULL);
Query OK, 1 row affected (0.12 sec)
登録したデータの確認
SELECT文で全レコードを表示し、現状を確認しておきます。
mysql> select * from convertNullToZeroDemo;
出力結果は以下の通りです。SalaryカラムにNULLが3件含まれていることがわかります。
+----+-------+--------+
| Id | Name | Salary |
+----+-------+--------+
| 1 | John | NULL |
| 2 | Carol | 5610 |
| 3 | Bob | NULL |
| 4 | David | NULL |
+----+-------+--------+
4 rows in set (0.05 sec)
COALESCE()関数でNULLを0に変換するクエリ
それでは、COALESCE()関数を使ってNULLを0に変換してみます。
mysql> select coalesce(Salary,0) as `CONVERT_NULL_TO_0` from convertNullToZeroDemo;
実行結果はこちらです。
+--------------------+
| CONVERT_NULL_TO_0 |
+--------------------+
| 0 |
| 5610 |
| 0 |
| 0 |
+--------------------+
4 rows in set (0.00 sec)
解説:なぜNULLが0に変わるのか
COALESCE()関数は、引数を左から順に評価し、最初に見つかったNULL以外の値を返します。coalesce(Salary, 0)の場合、SalaryがNULLでなければそのまま元の値が返され、NULLだった場合のみ代わりに0が返されます。上記の出力を見ると、Carolの5610はそのまま表示され、それ以外のNULLだった行はすべて0に置き換わっていることが確認できます。
まとめ
COALESCE()関数は、NULLを任意の値に置き換えたいときに非常に便利な関数です。今回のように第2引数に0を指定すればNULL→0の変換が簡単に実現でき、同様の処理はIFNULL()関数でも可能です。集計処理や帳票出力などでNULLが扱いにくい場面では、ぜひ活用してみてください。
-
MySQLで文字列を日時(DATETIME)に変換する方法【STR_TO_DATE活用術】
MySQLでは、STR_TO_DATE()関数とフォーマット指定子を組み合わせることで、VARCHAR型などで文字列として保存されている日付・時刻データを、DATETIME型に変換することができます。 基本構文 フォーマット指定子を使用した基本構文は以下の通りです。 select str_to_date(yourColumnName,%d/%m/%Y %h:%i %p) as anyAliasName from yourTableName; 主なフォーマット指定子の意味 %d:日(2桁) %m:月(2桁) %Y:年(4桁) %h:時(12時間制・2桁) %i:分(2桁) %p:午前/午後
-
MySQLで日付形式を変換する方法|STR_TO_DATE()関数の使い方を解説
MySQLでは、VARCHAR型などで保存された文字列の日付データを、正しい日付・時刻形式に変換したいケースがよくあります。そんなときに活躍するのが STR_TO_DATE() 関数です。この記事では、実際のSQL例とともに具体的な使い方を解説します。サンプルテーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable2010 ( DueDate varchar(20) ); Query OK, 0 rows affected (0.68 sec)テストデータの挿入INSERT文を使って、「日/月/年 時:分:秒」