MySQLでは、NULLIF()
NULL
を返すフロー制御関数です。 その引数の両方が同等である場合。それ以外の場合は、最初の引数を返します。
構文
構文は次のようになります:
NULLIF(expr1,expr2)
例
デモンストレーションの例を次に示します。
SELECT NULLIF( 7, 7 );
結果:
NULL
この場合、両方の引数は同一であるため、結果はNULL
になります。 。
引数が同等でない場合
引数が同等でない場合は、次のようになります。
SELECT NULLIF( 7, 8 );
結果:
7
引数が異なるため、最初の引数が返されます。
文字列
文字列を比較する例を次に示します。
SELECT
NULLIF( 'Bean', 'Bean' ) AS "Same",
NULLIF( 'Bean', 'Mushroom' ) AS "Different";
結果:
Same Different ---- --------- NULL Bean
日付
日付を比較する例を次に示します。
SELECT
NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";
結果:
Same Different ---- ---------- NULL 2030-12-20
表現
NULLIF()
式の現在の値を評価します。したがって、次のような式を渡すと、次のようになります。
SELECT NULLIF( 8, 2 * 4 );
これを取得します:
NULL
2に4を掛けたものは8なので、2つの引数は同等です。
2番目の引数を変更するとどうなりますか:
SELECT NULLIF( 8, 2 * 3 );
結果:
8
最初の引数が返されます。
データベースの例
次のクエリを実行するとします。
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
結果:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Andorra | Andorra | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Gibraltar | Gibraltar | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Malta | Malta | | Portugal | Portugal | | San Marino | San Marino | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
ここでは、左側の列に国名があり、右側にそれぞれの国のローカル名があります。
NULLIF()
を追加しましょう クエリの3番目の列へ:
SELECT
Name,
LocalName,
NULLIF(LocalName, Name) AS "Local Name if Different"
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
結果:
+-------------------------------+--------------------------------+--------------------------------+ | Name | LocalName | Local Name if Different | +-------------------------------+--------------------------------+--------------------------------+ | Albania | Shqipëria | Shqipëria | | Andorra | Andorra | NULL | | Bosnia and Herzegovina | Bosna i Hercegovina | Bosna i Hercegovina | | Croatia | Hrvatska | Hrvatska | | Gibraltar | Gibraltar | NULL | | Greece | Elláda | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | Santa Sede/Città del Vaticano | | Italy | Italia | Italia | | Macedonia | Makedonija | Makedonija | | Malta | Malta | NULL | | Portugal | Portugal | NULL | | San Marino | San Marino | NULL | | Slovenia | Slovenija | Slovenija | | Spain | España | España | | Yugoslavia | Jugoslavija | Jugoslavija | +-------------------------------+--------------------------------+--------------------------------+
3番目の列は、Name
の値と異なる場合にのみローカル名を返すことがわかります。 桁。同じ場合は、NULL
返されます。
NULLIF()
を使用することもできます クエリ結果をフィルタリングするには:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;
結果:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
この場合、ローカル名がName
と異なる行のみを返しました。 列。
NULLIF()
vs CASE
次のコード:
NULLIF(expr1,expr2)
次のCASE
と同等です 式:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
パラメータカウントが正しくありません
間違った数の引数を渡すと、エラーが発生します:
SELECT NULLIF( 5 );
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'