NULLIF(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
지정된 두 식이 같으면 Null 값을 반환합니다. 예를 들어 SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different;
는 두 입력 값이 동일하기 때문에 첫 번째 열(4 및 4)에 대해 NULL을 반환합니다. 두 번째 열은 두 입력 값이 다르기 때문에 첫 번째 값(5)을 반환합니다.
구문
NULLIF ( expression , expression )
인수
expression
유효한 스칼라 식입니다.
반환 형식
첫 번째 식과 동일한 형식을 반환합니다.
NULLIF는 두 식이 같지 않으면 첫 번째 식을 반환합니다. 식이 같으면 NULLIF는 첫 번째 식 형식의 Null 값을 반환합니다.
설명
NULLIF는 두 식이 동일하며 결과 식이 NULL인 검색된 CASE 식과 동일합니다.
NULLIF 함수 내에 RAND()와 같은 시간에 종속적인 함수를 사용하지 않는 것이 좋습니다. 이렇게 하면 함수가 두 번 평가되고 두 호출에서 다른 결과가 반환됩니다.
예제
A. 변경되지 않은 예산 반환
다음 예에서는 부서(budgets
), 금년도 예산(dept
) 및 전년도 예산(current_year
)을 보여 주는 previous_year
테이블을 만듭니다. 금년 예산이 전년도 예산에서 변하지 않은 부서에는 NULL
이 예산이 아직 결정되지 않은 부서에는 0
이 사용됩니다. 예산이 결정된 부서만의 평균을 계산하고 이전 연도의 예산 값(previous_year
값 사용. 여기서 current_year
는 NULL
임)을 포함하려면 NULLIF
함수와 COALESCE
함수를 결합합니다.
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)
B. NULLIF 및 CASE 비교
NULLIF
와 CASE
의 유사점을 보여 주기 위해 다음 쿼리는 MakeFlag
및 FinishedGoodsFlag
열의 값이 같은지 여부를 평가합니다. 첫 번째 쿼리에서는 NULLIF
를 사용합니다. 두 번째 쿼리에서는 CASE
식을 사용합니다.
USE AdventureWorks2022;
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
C. 데이터가 포함되지 않은 예산 반환
다음 예에서는 budgets
테이블을 생성하고, 데이터를 로드하고, NULLIF
를 사용하여 current_year
가 null이거나 previous_year
와 동일한 데이터를 포함한 경우 null 값을 반환합니다.
Copy
CREATE TABLE budgets (
dept TINYINT,
current_year DECIMAL(10,2),
previous_year DECIMAL(10,2)
);
INSERT INTO budgets VALUES(1, 100000, 150000);
INSERT INTO budgets VALUES(2, NULL, 300000);
INSERT INTO budgets VALUES(3, 0, 100000);
INSERT INTO budgets VALUES(4, NULL, 150000);
INSERT INTO budgets VALUES(5, 300000, 300000);
SELECT dept, NULLIF(current_year,
previous_year) AS LastBudget
FROM budgets;
결과 집합은 다음과 같습니다.
dept LastBudget
---- -----------
1 100000.00
2 null
3 0.00
4 null
5 null
참고 항목
CASE(Transact-SQL)
decimal 및 numeric(Transact-SQL)
시스템 함수(Transact-SQL)