NULLIF (Transact-SQL)

更新 : 2006 年 12 月 12 日

指定された 2 つの式が等しい場合に NULL 値を返します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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_yearNULL の場合は 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)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

追加内容 :
  • NULLIF 内で時間に依存する関数を使用することについての情報を追加。

2006 年 4 月 14 日

新しい内容 :
  • NULLIF と CASE の類似性を示す例を追加。