MariaDBでは、NULLIF()
関数はNULL
を返します その引数の両方が同等である場合。それ以外の場合は、最初の引数を返します。
構文
構文は次のようになります:
NULLIF(expr1,expr2)
例
デモンストレーションの例を次に示します。
SELECT NULLIF( 5, 5 );
結果:
NULL
この場合、両方の引数は同一であるため、結果はNULL
になります。 。
引数が同等でない場合
引数が同等でない場合は、次のようになります。
SELECT NULLIF( 5, 3 );
結果:
5
この場合、最初の引数が返されます。
文字列
文字列を比較する例を次に示します。
SELECT
NULLIF( 'Papaya', 'Papaya' ) AS "Same",
NULLIF( 'Papaya', 'Salad' ) AS "Different";
結果:
+------+-----------+ | Same | Different | +------+-----------+ | NULL | Papaya | +------+-----------+
日付
日付を比較する例を次に示します。
SELECT
NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";
結果:
+------+------------+ | Same | Different | +------+------------+ | NULL | 2000-10-30 | +------+------------+
表現
NULLIF()
式の現在の値を評価します。したがって、次のような式を渡すと、次のようになります。
SELECT NULLIF( 10, 2 * 5 );
これを取得します:
NULL
2に5を掛けたものは10なので、2つの引数は同等です。
2番目の引数を変更するとどうなりますか:
SELECT NULLIF( 10, 3 * 5 );
結果:
10
最初の引数が返されます。
データベースの例
次のクエリを実行するとします。
SELECT
Name,
LocalName
FROM country
ORDER BY Name ASC
LIMIT 10;
結果:
+---------------------+-----------------------+ | Name | LocalName | +---------------------+-----------------------+ | Afghanistan | Afganistan/Afqanestan | | Albania | Shqipëria | | Algeria | Al-Jaza’ir/Algérie | | American Samoa | Amerika Samoa | | Andorra | Andorra | | Angola | Angola | | Anguilla | Anguilla | | Antarctica | – | | Antigua and Barbuda | Antigua and Barbuda | | Argentina | Argentina | +---------------------+-----------------------+
ここでは、左側の列に国名があり、右側にそれぞれの国のローカル名があります。
NULLIF()
を追加しましょう クエリの3番目の列へ:
SELECT
Name,
LocalName,
NULLIF(LocalName, Name) AS "Local Name Different"
FROM country
ORDER BY Name ASC
LIMIT 10;
結果:
+---------------------+-----------------------+-----------------------+ | Name | LocalName | Local Name Different | +---------------------+-----------------------+-----------------------+ | Afghanistan | Afganistan/Afqanestan | Afganistan/Afqanestan | | Albania | Shqipëria | Shqipëria | | Algeria | Al-Jaza’ir/Algérie | Al-Jaza’ir/Algérie | | American Samoa | Amerika Samoa | Amerika Samoa | | Andorra | Andorra | NULL | | Angola | Angola | NULL | | Anguilla | Anguilla | NULL | | Antarctica | – | – | | Antigua and Barbuda | Antigua and Barbuda | NULL | | Argentina | Argentina | NULL | +---------------------+-----------------------+-----------------------+
3番目の列は、Name
の値と異なる場合にのみローカル名を返すことがわかります。 桁。同じ場合は、NULL
返されます。
または、NULLIF()
を使用することもできます クエリ結果をフィルタリングするには:
SELECT
Name,
LocalName
FROM country
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10;
結果:
+----------------+-----------------------+ | Name | LocalName | +----------------+-----------------------+ | Afghanistan | Afganistan/Afqanestan | | Albania | Shqipëria | | Algeria | Al-Jaza’ir/Algérie | | American Samoa | Amerika Samoa | | Antarctica | – | | Armenia | Hajastan | | Austria | Österreich | | Azerbaijan | Azärbaycan | | Bahamas | The Bahamas | | Bahrain | Al-Bahrayn | +----------------+-----------------------+
この場合、ローカル名がName
と異なる行のみを返しました。 列。
NULLIF()
vs CASE
次のコード:
NULLIF(expr1,expr2)
次のCASE
と同等です 式:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
パラメータカウントが正しくありません
間違った数の引数を渡すと、エラーが発生します:
SELECT NULLIF( 10 );
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'