ケースvs isnull vs合体


9

SQL Server 2012試験のドキュメントを読んでいるだけで、次の点がわかりました。

ケースvs isnull vs合体

今、私が知っているどのようにそれぞれのいずれかを使用するが、私は知らないWHEN各1を使用します。いくつかの体を明確にしてください。ありがとう。

Ps。試験問題のタグを付けていただけませんか?


2
COALESCEに拡張されてCASEいますが、明らかにCASE自分で記述したステートメントでは、WHEN条件により柔軟に対応できます。以下のためにISNULLCOALESCE 関連/複製?
マーティン・スミス

関連する私は同意します。重複しない。コメントをありがとう:)
Stuart Blackler

回答:


10

ISNULL -SQL Serverでのみ使用できます。NULL値をテストして、相互に置き換えることができます。

COALESCE -ANSI規格。可変長の引数のセットで、NULL値をテストして最初の非null値で置き換えることができます。データ型の優先順位がこれに影響を与えることに注意することが重要です

-- Conversion failed when converting the varchar value 'a' to data type int
SELECT COALESCE(CAST(NULL AS varchar(10)), 'a', 1) 
-- Returns 1
SELECT COALESCE(CAST(NULL AS varchar(10)), 1, 'a')

上記の例では、「a」が最初の非null値ですが、文字データは整数よりも優先順位が低くなっています。

ISNULLとCOALESCEのもう1つの考慮事項は、COALESCE呼び出しの結果はNULL可能である一方で、ISNULLの結果はNOT NULLであると判断されることです。JRJの投稿ISNULL()<> COALESCE()を参照することは簡単なことのように思えるかもしれませんが、クエリオプティマイザーは列のNULL可能性に基づいてさまざまな計画を作成できます。

isnull / coalesce / case式のnull 可能性は、dmo sys.dm_exec_describe_first_result_setを介して実行することで簡単にテストできます

-- these all evaluate to not nullable (is_nullable = 0) because I'm not clever enough
DECLARE @sql nvarchar(4000) = N'
SELECT ISNULL(NULL, 1) AS I
, COALESCE(NULL, 1) AS C
, CASE WHEN NULL = NULL THEN NULL ELSE 1 END AS C1
'
SELECT
    DMO.*
FROM
    sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS DMO

CASE -ANSI標準のスカラー関数。単純なスカラーで表現できないテストがある場合、前の2つに比べてCASEを使用することを検討しますが、それはかなり弱い答えです、と私は認めます。


完全な回答をすぐにありがとう。優先順位が重要であることを私は知りませんでしたCOALESCE。ありがとうございました
Stuart Blackler

1
CASE技術的には式ではなく、関数です。
ypercubeᵀᴹ

1

ISNULLは1つの交換を返す可能性を提供します。COALESCEは1つの値に制限されません。たとえばCOALESCE(v1,v2,v3,v4,v5) 、V5がNULLでない唯一の値である場合、それが返されます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.