NULLIF(Transact-SQL)
지정된 두 식이 같으면 Null 값을 반환합니다.
적용 대상: SQL Server(SQL Server 2008 - current version), Windows Azure 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 AdventureWorks2012;
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 AdventureWorks2012;
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