[MSSQL] ISNULL 함수 사용법 (NVL, NVL2, IFNULL)

SQL Server에서는 NULL 값을 치환하기 위해서는 ISNULL 함수를 사용한다. 오라클에서 NVL 함수와 MySQL의 IFNULL 함수와 동일한 기능을 수행한다. 

 

오라클의 NVL2와 동일한 함수는 없지만, IIF 함수 또는 CASE 문을 활용하여 비슷한 기능을 수행할 수 있으니 아래의 예제를 참고하면 도움이 될 수 있다.

 

MSSQL ISNULL 함수

 

숫자 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

 

 

 

댓글

Designed by JB FACTORY