SQL Server에서는 NULL 값을 치환하기 위해서는 ISNULL 함수를 사용한다. 오라클에서 NVL 함수와 MySQL의 IFNULL 함수와 동일한 기능을 수행한다.
오라클의 NVL2와 동일한 함수는 없지만, IIF 함수 또는 CASE 문을 활용하여 비슷한 기능을 수행할 수 있으니 아래의 예제를 참고하면 도움이 될 수 있다.
숫자 NULL 치환
WITH emp AS
(
SELECT 'JONES' AS ename, 3000 AS salary, NULL AS retire UNION ALL
SELECT 'SCOTT' AS ename, NULl AS salary, 'Y' AS retire
)
SELECT ename
, salary
, ISNULL(salary, 0) AS sal
FROM emp
급여(salary)가 NULL인 경우 0으로 치환한다.
문자 NULL 치환
WITH emp AS
(
SELECT 'JONES' AS ename, 3000 AS salary, NULL AS retire UNION ALL
SELECT 'SCOTT' AS ename, NULl AS salary, 'Y' AS retire
)
SELECT ename
, retire
, ISNULL(retire, 'N') AS ret
FROM emp
퇴사구분(retire)이 NULL인 경우 'N'으로 치환한다.
WHERE절 사용
WITH emp AS
(
SELECT 'JONES' AS ename, 3000 AS salary, NULL AS retire UNION ALL
SELECT 'SCOTT' AS ename, NULl AS salary, 'Y' AS retire
)
SELECT ename
, salary
, retire
FROM emp
WHERE ISNULL(retire, 'N') = 'N'
WHERE절에서 NULL 값의 컬럼을 조회하기 위해서는 "컬럼 IS NULL" 또는 "ISNULL(컬럼, '대체값') = '대체값'"으로 조회 한다.
NVL2 함수 대체 방법
오라클의 NVL2 함수는 NULL인 경우와 NOT NULL인 경우 대체값을 2가지 지정할 수 있다. 그러나 MSSQL에서는 NVL2와 같은 기능의 함수는 없다.
아래의 IIF 함수와 CASE 문을 활용하여 비슷한 기능을 수행 할 수 있다.
(IIF 함수는 SQL Server 2012 이상부터 사용가능)
WITH emp AS
(
SELECT 'JONES' AS ename, 3000 AS salary, NULL AS retire UNION ALL
SELECT 'SCOTT' AS ename, NULl AS salary, 'Y' AS retire
)
SELECT ename
, retire
, IIF(retire IS NULL, '재직', '퇴사') AS ret
FROM emp
WITH emp AS
(
SELECT 'JONES' AS ename, 3000 AS salary, NULL AS retire UNION ALL
SELECT 'SCOTT' AS ename, NULl AS salary, 'Y' AS retire
)
SELECT ename
, retire
, CASE WHEN retire IS NULL THEN '재직'
ELSE '퇴사'
END AS ret
FROM emp