MySQLのIFNULL()関数とNULLIF()関数の違いとは?区別する方法をわかりやすく解説
MySQLのIFNULL()関数とNULLIF()関数の構文
MySQLには、NULL値を扱うための便利な関数としてIFNULL()とNULLIF()が用意されています。この2つの関数は、一見するとよく似ていますが、実はまったく異なる目的で使用されます。まずは、それぞれの構文を見てみましょう。どちらも以下のようにほぼ同じ形式になっています。
IFNULL()関数の構文
IFNULL(expression1, expression2)
NULLIF()関数の構文
NULLIF(expression1, expression2)
2つの関数を区別するポイント
両者を区別する鍵は、「どのような条件で第1引数を結果として返すか」という点にあります。
- IFNULL()関数: 第1引数がNULLでない場合に、その第1引数を返します。NULLであった場合は第2引数を返します。
- NULLIF()関数: 2つの引数が等しくない場合に、第1引数を返します。2つの引数が等しい場合はNULLを返します。
実際の動作例
次の例では、両方の関数に「Ram」と「Shyam」という2つの文字列を渡しています。
mysql> Select IFNULL('Ram','Shyam');
+-----------------------+
| IFNULL('Ram','Shyam') |
+-----------------------+
| Ram |
+-----------------------+
1 row in set (0.00 sec)
mysql> Select NULLIF('Ram','Shyam');
+-----------------------+
| NULLIF('Ram','Shyam') |
+-----------------------+
| Ram |
+-----------------------+
1 row in set (0.00 sec)上記の実行結果を見ると、どちらも「Ram」を返しているため、2つの関数は同じように動作しているように見えるかもしれません。しかし、その理由はまったく異なります。
- IFNULL('Ram','Shyam') が「Ram」を返したのは、「Ram」が第1引数であり、NULLではないからです。
- NULLIF('Ram','Shyam') が「Ram」を返したのは、「Ram」が第1引数であり、第2引数の「Shyam」と値が異なるからです。
まとめ:使い分けの早見表
| 関数名 | 返す値の条件 | 主な用途 |
|---|---|---|
| IFNULL() | 第1引数がNULLでなければ第1引数、NULLなら第2引数 | NULL値の代替値への置き換え |
| NULLIF() | 2つの引数が異なれば第1引数、等しければNULL | 特定の値をNULLとして扱いたい場合 |
このように、IFNULL()は「NULL対策」のための関数、NULLIF()は「値の比較によってNULLを作り出す」ための関数と覚えておくと、適切に使い分けることができます。
-
MySQLで今日から7日前までの日付データを取得する方法
特定の期間内の日付データを取得するには、DATE()関数とINTERVAL演算子を組み合わせて使用します。ここでは、今日から7日前までの間に該当するレコードを抽出する方法を解説します。select *from yourTableName where DATE(yourColumnName) > (NOW() - INTERVAL 7 DAY);注意: 現在の日付が「2019-06-02」であると仮定して説明します。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable ( &
-
MySQLで1980年〜1996年生まれのユーザーの割合(パーセンテージ)を求める方法
MySQLでは、SUM()関数とCOUNT()関数を組み合わせることで、特定の条件に該当するレコードの割合(パーセンテージ)を簡単に算出できます。この記事では、生年月日が1980年から1996年の間であるユーザーの割合を求める方法を、具体的なサンプルとともに分かりやすく解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable-> (-> DateOfBirth varchar(100)-> );Query OK, 0 rows affected (0.55 sec)データの挿入次に、INSERT