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

SQL ServerでのNULLIF()のしくみ

    SQL Serverでは、NULLIF() expressionは、指定された2つの式の値をチェックします。等しい場合はnull値を返し、そうでない場合は最初の式を返します。

    構文

    構文は次のようになります:

    NULLIF ( expression , expression )

    デモンストレーションの例を次に示します。

    SELECT NULLIF(3, 3);

    結果:

    NULL

    ここでは、両方の式が等しいため、結果はnull値になります。

    式が等しくない場合は、次のようになります。

    SELECT NULLIF(3, 7);

    結果:

    3

    今回は最初の値が返されます。

    両方の結果をカプセル化した例を次に示します。

    SELECT 
        NULLIF(0, 0) AS a,
        NULLIF(3, 3) AS b,
        NULLIF(3, 0) AS c,
        NULLIF(0, 3) AS d;

    結果:

    +------+------+-----+-----+
    | a    | b    | c   | d   |
    |------+------+-----+-----|
    | NULL | NULL | 3   | 0   |
    +------+------+-----+-----+

    実用的な例

    次のデータを含むテーブルがあるとします。

    SELECT 
        ProductName,
        ProductPrice
    FROM Products;

    結果:

    +-------------------------------------+----------------+
    | ProductName                         | ProductPrice   |
    |-------------------------------------+----------------|
    | Left handed screwdriver             | 25.99          |
    | Long Weight (blue)                  | 14.75          |
    | Long Weight (green)                 | 11.99          |
    | Smash 2000 Sledgehammer             | 0.00           |
    | Chainsaw (includes 3 spare fingers) | 0.00           |
    | Straw Dog Box                       | NULL           |
    | Bottomless Coffee Mugs (4 Pack)     | 9.99           |
    | Right handed screwdriver            | 25.99          |
    +-------------------------------------+----------------+
    (8 rows affected)

    そして、正の価格の製品がいくつあるかを調べたいとします。つまり、価格がゼロまたはnull値の商品は含めたくありません。

    これを行うには、NULLIF()を使用できます COUNT()と組み合わせて 機能:

    SELECT 
        COUNT(NULLIF(ProductPrice, 0.00)) AS Result
    FROM Products;

    結果:

    +----------+
    | Result   |
    |----------|
    | 5        |
    +----------+
    Warning: Null value is eliminated by an aggregate or other SET operation.

    期待どおりに5が得られます。これは、ProductPriceで正の値を持つ行の数とまったく同じです。 桁。

    これは、COUNT()が機能するために機能します 関数はnull以外の値のみをカウントします。ゼロの量をnullに変換することで、計算でそれらの値を無視することができます。

    ここでもNULLIF()はありません 機能。

    SELECT COUNT(ProductPrice) AS Result
    FROM Products;

    結果:

    +----------+
    | Result   |
    |----------|
    | 7        |
    +----------+
    Warning: Null value is eliminated by an aggregate or other SET operation.

    今回はゼロの金額が含まれ、7が得られます。実際にはnull値であるため、行6は無視されます。

    最初の引数がヌル定数の場合

    この関数は、最初の引数としてnull定数を受け入れません:

    SELECT NULLIF(null, 3);

    結果:

    Msg 4151, Level 16, State 1, Line 1
    The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.

    エラーメッセージに示されているように、最初の引数のタイプを知っている必要があります。関数の戻り値は最初の式のデータ型を使用し、このエラーはそれを反映しています。

    このエラーは非常にまれです。ほとんどの場合、最初の引数として列名を渡します。SQLServerでは、列のデータ型が定義されています。このような場合、SQL Serverは列のデータ型を認識しているため、実際にはnull値が受け入れられます。

    変数についても同じことが言えます。変数を渡す場合は、その型を宣言する必要があるため、エラーは発生しません。

    無効な引数カウント

    引数を渡さずに関数を呼び出すと、エラーが発生します:

    SELECT NULLIF();

    結果:

    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near ')'.

    また、あまりにも多くの引数を渡すとエラーが発生します:

    SELECT NULLIF(1, 2, 3);

    結果:

    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near ','.

    1. SQLBETWEEN-値の範囲をスキャンするためのスマートなヒント

    2. PostgreSQLを使用して現在のデータベースのテーブルを一覧表示する方法

    3. OracleのNVL2()関数

    4. PostgreSQL緯度経度クエリ