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

SQL Server COALESCE()の説明

    SQL Serverでは、COALESCE() 式は最初のnull以外の引数を返します。

    動作方法は、引数のリストを式に渡し、引数を順番に評価し、最初はNULLに評価されなかった最初の式の現在の値を返します。 。

    構文

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

    COALESCE ( expression [ ,...n ] )

    簡単な例を次に示します。

    SELECT COALESCE(null, 'Cat', 'Dog');

    結果:

    Cat

    この場合、Cat は最初の非NULL引数であったため、COALESCE() その値を返しました。

    表現

    前述のように、COALESCE() 現在の値を返します 最初はNULLと評価されない最初の式の 。したがって、次のような式を渡すと、次のようになります。

    SELECT COALESCE( null, 2 * 3 );

    これを取得します:

    6

    この関数は、データ型の優先順位が最も高い式のデータ型を返します。すべての式がnull不可の場合、結果はnull不可として入力されます。

    すべての引数がNULLの場合

    すべての引数がNULLの場合 、COALESCE() NULLを返します 。ただし、null値の少なくとも1つは型指定されたNULLである必要があります 、それ以外の場合はエラーが発生します。

    つまり、すべてをNULLにすることはできません。 定数:

    SELECT COALESCE( null, null );

    これを取得します:

    Msg 4127, Level 16, State 1, Line 1
    At least one of the arguments to COALESCE must be an expression that is not the NULL constant.

    この場合、すべての引数はNULLでした 定数であるため、エラーが返されました。

    以下は、COALESCE()のシナリオを示すデータベースの例です。 NULLを返します すべての引数がNULLの場合 。

    次のクエリを実行するとします。

    SELECT CustomerId, CustomerCategoryId
    FROM Sales.SpecialDeals
    WHERE SpecialDealId = 1;

    結果:

    CustomerId  CustomerCategoryId
    ----------- ------------------
    NULL        NULL

    両方の列にNULLが含まれています 値。

    したがって、両方の列をCOALESCE()に渡すと 、NULLの結果が得られます :

    SELECT COALESCE( CustomerId, CustomerCategoryId )
    FROM Sales.SpecialDeals
    WHERE SpecialDealId = 1;

    結果:

    NULL

    列の1つをNULLに置き換える場合も、同じことが言えます。 定数:

    SELECT COALESCE( CustomerId, null )
    FROM Sales.SpecialDeals
    WHERE SpecialDealId = 1;

    結果:

    NULL

    つまり、すべて 引数はNULLです エラーが発生する定数。

    NULLを置き換えます 既知の値の結果

    NULLの結果をその既知の値に置き換えるために、最後の引数として既知の値を含めることができます。

    たとえば、次のクエリはNULLを返します :

    SELECT SUM( UnitPrice ) 
    FROM Sales.SpecialDeals;

    結果:

    NULL

    この場合、UnitPrice 列のすべての行にNULL値が含まれているため、結果はNULLになりました。 。

    COALESCE()を使用できます このように:

    SELECT COALESCE( SUM( UnitPrice ), 0 )
    FROM Sales.SpecialDeals;

    結果:

    0.00

    これで、NULLの結果が既知の値(ゼロ)に置き換えられます。

    COALESCE() vs CASE

    COALESCE() 式は、実際にはCASEの構文上のショートカットです。 表現。 COALESCE()を使用する場合 式の場合、クエリオプティマイザはそれをCASEとして書き換えます。 表現。

    次のステートメントを実行すると:

    SELECT COALESCE( CustomerId, CustomerCategoryId )
    FROM Sales.SpecialDeals
    WHERE SpecialDealId = 1;

    クエリオプティマイザはそれを次のように書き換えます:

    CASE 
    WHEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID] IS NOT NULL THEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID] 
    ELSE [WideWorldImporters].[Sales].[SpecialDeals].[CustomerCategoryID] 
    END

    COALESCE() vs ISNULL()

    ある意味で、COALESCE() 式はISNULL()に似ています 働き。しかし、違いがあります。特に:

    • ISNULL() は関数であり、一度だけ評価されます。 COALESCE() 一方、は式であり、複数回評価される可能性があります。
    • 結果の式のデータ型の決定は異なります。 ISNULL 最初のパラメータのデータ型であるCOALESCEを使用します CASEに従います 式は、優先順位が最も高い値のデータ型をルール化して返します。
    • 結果式のNULL可能性は、ISNULLでは異なります およびCOALESCEISNULL 戻り値は常にNULL不可と見なされます(戻り値がNULL不可であると想定)。対照的に、COALESCE null以外のパラメータを使用すると、NULLと見なされます 。
    • ISNULLの検証 およびCOALESCE も違います。たとえば、NULL ISNULLの値 intに変換されます ただし、COALESCEの場合 、データ型を指定する必要があります。
    • ISNULL 2つのパラメータのみを取ります。対照的に、COALESCE 可変数のパラメーターを取ります。

    詳細情報

    詳細およびより複雑な例については、Microsoftのドキュメントを参照してください。


    1. OracleのRAWTONHEX()関数

    2. SQLサーバーのdoubleを表すものは何ですか?

    3. 2 Oracleの日付から日、月、年を取得する関数

    4. ColumnStoreはページネーションワークロードを支援できますか?