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

MySQL NULLIF()の説明

    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'

    1. SQLServerのCOALESCE関数に関する5つの質問に対する上位の回答

    2. MySQLフィールドの先頭と末尾の空白を削除するにはどうすればよいですか?

    3. MySQLでJSONデータを検索する方法は?

    4. SWITCHOFFSET()SQLServerの例