다음을 통해 공유


NULLIF(Transact-SQL)

지정된 두 식이 같으면 Null 값을 반환합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

NULLIF ( expression , expression )

인수

  • expression
    유효한 스칼라 입니다.

반환 형식

첫 번째 expression과 동일한 형식을 반환합니다.

NULLIF는 두 식이 같지 않으면 첫 번째 expression을 반환합니다. 식이 같으면 NULLIF는 첫 번째 expression 형식의 Null 값을 반환합니다.

주의

NULLIF는 두 식이 동일하며 결과 식이 NULL인 검색된 CASE 식과 동일합니다.

NULLIF 함수 내에 RAND()와 같은 시간에 종속적인 함수를 사용하지 않는 것이 좋습니다. 이렇게 하면 함수가 두 번 평가되고 두 호출에서 다른 결과가 반환됩니다.

1. 변경되지 않은 예산 반환

다음 예에서는 부서(dept), 금년도 예산(current_year) 및 전년도 예산(previous_year)을 보여 주는 budgets 테이블을 만듭니다. 금년 예산이 전년도 예산에서 변하지 않은 부서에는 NULL이 예산이 아직 결정되지 않은 부서에는 0이 사용됩니다. 예산이 결정된 부서만의 평균을 계산하고 이전 연도의 예산 값(previous_year 값 사용. 여기서 current_year는 NULL임)을 포함하려면 NULLIF 함수와 COALESCE 함수를 결합합니다.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.budgets','U') IS NOT NULL
   DROP TABLE budgets;
GO
SET NOCOUNT ON;
CREATE TABLE dbo.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)

2. NULLIF 및 CASE 비교

NULLIF와 CASE의 유사점을 보여 주기 위해 다음 쿼리는 MakeFlag 및 FinishedGoodsFlag 열의 값이 같은지 여부를 평가합니다. 첫 번째 쿼리에서는 NULLIF를 사용합니다. 두 번째 쿼리에서는 CASE 식을 사용합니다.

USE AdventureWorks2008R2;
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