sql >> データベース >  >> RDS >> MariaDB

MariaDB NULLIF()の説明

    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'

    1. Postgresデータ型NUMERICは符号付きの値を保存できますか?

    2. KubernetesでのヘルパーコンテナとしてのProxySQLの実行

    3. なぜHadoopでCassandraを学ぶのですか?

    4. RailsとPostgreSQLを使用してオカレンスを含むグループ化されたリストを返します