TSQLのCOALESCE関数がどのように機能するかを誰かが説明できますか?構文は次のとおりです
COALESCE(x、y)
この関数に関するMSDNドキュメントはかなりあいまいです
TSQLのCOALESCE関数がどのように機能するかを誰かが説明できますか?構文は次のとおりです
COALESCE(x、y)
この関数に関するMSDNドキュメントはかなりあいまいです
ドキュメントがあいまいだと思う理由がわかりません。
すべてのパラメータを 1 つずつ調べて、最初のパラメータを返しますNOT NULL
。
COALESCE(NULL, NULL, NULL, 1, 2, 3)
=> 1
COALESCE(1, 2, 3, 4, 5, NULL)
=> 1
COALESCE(NULL, NULL, NULL, 3, 2, NULL)
=> 3
COALESCE(6, 5, 4, 3, 2, NULL)
=> 6
COALESCE(NULL, NULL, NULL, NULL, NULL, NULL)
=> NULL
これはほとんど任意の数のパラメーターを受け入れますが、それらは同じデータ型である必要があります。 (同じデータ型でない場合は、データ型の優先順位を使用して、適切なデータ型に暗黙的にキャストされます。)
ISNULL()
2 つだけではなく、複数のパラメーターのようです。
それはまたANSI-SQL
、そうでISNULL()
はありません。
COALESCE は ISNULL よりもコストがかからないと言われていますが、調査によるとそうではありません。ISNULL は 2 つのパラメーターのみを受け取ります。フィールドは NULL と評価され、NULL と評価された場合は必要な結果になります。COALESCE は任意の数のパラメーターを取り、最初に検出された NULL 以外の値を返します。
ここに詳細のより完全な説明があります http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/
これが私が COALESCE を見る方法です...そしてうまくいけばそれは理にかなっています...
シンプルな形に…。
Coalesce(フィールド名, '空')
したがって、これは次のように変換されます...「FieldName」が NULL の場合、フィールド値に「EMPTY」という単語を入力します。
複数の値の場合...
合体 (フィールド名 1、フィールド名 2、値 2、値 3)
Fieldname1 の値が null の場合は Fieldname2 の値を入力し、FieldName2 が NULL の場合は Value2 を入力します。
AdventureWorks2012サンプル データベースのこのテスト コードは完全に機能し、 COALESCEのしくみを視覚的に説明しています。
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product
ISNULL を単に置き換えるだけでなく、合体させるべきことがたくさんあります。合体の公式の「ドキュメント」が曖昧で役に立たないことに完全に同意します。この記事はとても役に立ちます。 http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
合体は、左から右に n 個の引数を取ります。合体は、null 以外の最初の引数を選択します。同様に isnull(field,'unknown') は、coalesce(field,'unknown') と同等ですが、coalesce は複数のフィールドを比較できるという違いがあります。