NULLIF (Transact-SQL)
更新 : 2006 年 12 月 12 日
指定された 2 つの式が等しい場合に NULL 値を返します。
構文
NULLIF ( expression , expression )
引数
expression
任意の有効なスカラ式です。詳細については、「式 (Transact-SQL)」を参照してください。
戻り値の型
最初に指定した expression と同じデータ型を返します。
2 つの式が等しくない場合、NULLIF は最初に指定した expression を返します。2 つの式が等しい場合、NULLIF は最初に指定した expression のデータ型の NULL 値を返します。
解説
NULLIF は、2 つの式を比較し、その 2 つが等価な場合に NULL を返す CASE 関数と同じです。
NULLIF 関数の中では、RAND() など時間に依存する関数は使用しないことをお勧めします。関数が 2 回呼び出されて評価され、それぞれ異なる結果が返されることがあります。
例
A. 変更のない予算額を返す
次の例では、部門 (dept
)、今年度予算 (current_year
)、および昨年度予算 (previous_year
) で構成される budgets
テーブルを作成します。今年度予算が昨年度予算と変わらない部門については NULL
を使用し、今年度予算がまだ決定していない場合は 0
を使用します。昨年度予算の値を使用する場合も含めて (current_year
が NULL
の場合は previous_year
の値を使用)、今年度予算を受け取った部門についてだけその平均値を求めるには、NULLIF
関数と COALESCE
関数を組み合わせて使用します。
USE AdventureWorks;
GO
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'budgets')
DROP TABLE budgets;
GO
SET NOCOUNT ON;
CREATE TABLE budgets
(
dept tinyint IDENTITY,
current_year decimal NULL,
previous_year decimal NULL
);
INSERT budgets VALUES(100000, 150000);
INSERT budgets VALUES(NULL, 300000);
INSERT budgets VALUES(0, 100000);
INSERT budgets VALUES(NULL, 150000);
INSERT budgets VALUES(300000, 250000);
GO
SET NOCOUNT OFF;
SELECT AVG(NULLIF(COALESCE(current_year,
previous_year), 0.00)) AS 'Average Budget'
FROM budgets;
GO
以下に結果セットを示します。
Average Budget
----------------------------------------
212500.000000
(1 row(s) affected)
B. NULLIF と CASE を比較する
NULLIF と CASE の類似性を示すため、次のクエリでは、MakeFlag
列と FinishedGoodsFlag
列の値が同じかどうかを評価します。最初のクエリでは NULLIF
を使用します。2 番目のクエリでは CASE
ステートメントを使用します。
USE AdventureWorks;
GO
SELECT ProductID, MakeFlag, FinishedGoodsFlag,
NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal'
FROM Production.Product
WHERE ProductID < 10;
GO
SELECT ProductID, MakeFlag, FinishedGoodsFlag,'Null if Equal' =
CASE
WHEN MakeFlag = FinishedGoodsFlag THEN NULL
ELSE MakeFlag
END
FROM Production.Product
WHERE ProductID < 10;
GO
参照
関連項目
CASE (Transact-SQL)
decimal 型と numeric 型 (Transact-SQL)
システム関数 (Transact-SQL)
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 12 月 12 日 |
|
2006 年 4 月 14 日 |
|