111

TSQLのCOALESCE関数がどのように機能するかを誰かが説明できますか?構文は次のとおりです

COALESCE(x、y)

この関数に関するMSDNドキュメントはかなりあいまいです

4

8 に答える 8

215

ドキュメントがあいまいだと思う理由がわかりません。

すべてのパラメータを 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()はありません。

于 2012-11-13T18:27:05.883 に答える
74

COALESCE は ISNULL よりもコストがかからないと言われていますが、調査によるとそうではありません。ISNULL は 2 つのパラメーターのみを受け取ります。フィールドは NULL と評価され、NULL と評価された場合は必要な結果になります。COALESCE は任意の数のパラメーターを取り、最初に検出された NULL 以外の値を返します。

ここに詳細のより完全な説明があります http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

于 2012-11-13T18:40:51.040 に答える
18

これが私が 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
于 2013-09-23T19:43:38.747 に答える
4

ISNULL を単に置き換えるだけでなく、合体させるべきことがたくさんあります。合体の公式の「ドキュメント」が曖昧で役に立たないことに完全に同意します。この記事はとても役に立ちます。 http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/

于 2013-07-10T13:52:11.720 に答える
0

合体は、左から右に n 個の引数を取ります。合体は、null 以外の最初の引数を選択します。同様に isnull(field,'unknown') は、coalesce(field,'unknown') と同等ですが、coalesce は複数のフィールドを比較できるという違いがあります。

于 2021-07-21T21:28:27.427 に答える