[Oracle] 오라클 NVL과 NVL2 차이점 쉽게 설명

오라클에서 NULL을 치환하기 위해서 NVL 함수를 자주 사용한다. NVL 함수와 유사한 NVL2 함수가 존재하며, NVL2 함수의 사용법이 익숙하지 않아서 헷갈리는 경우가 많다. 아래는 2개의 함수를 비교하고, 각각 함수를 사용하는 예시이니 참고하기 바란다.

 

NVL 함수와 NVL2 함수 비교

SELECT ename
     , comm
     , NVL(comm, 0)         AS nvl_comm
     , NVL2(comm, 'Y', 'N') AS nvl2_comm
  FROM emp
 WHERE job IN ('MANAGER', 'SALESMAN')

 

 

NVL 함수는 칼럼의 값이 NULL인 경우 특정 값으로 치환하기 위해서 사용한다.

NVL2 함수는 칼럼의 값이 NULL인 경우와 NULL이 아닌 경우 두 가지 케이스 모두 특정 값을 반환할 수 있다.

 

NVL 함수는 NULL인 경우 단순 기본값을 부여하기 위해서 자주 사용하며, NVL2 함수는 NULL을 기준으로 If ~ else ~와 같이 판단하여 특정 값을 반환할 수 있다.

 

NVL 함수

WITH emp_t AS (
    SELECT 'JONES' ename, NULL comm, 'RESEARCH' dname FROM dual UNION ALL
    SELECT 'ALLEN' ename, 300 comm, NULL dname FROM dual
)

SELECT ename
     , comm
     , NVL(comm, 0)          AS comm2
     , dname
     , NVL(dname, 'NO DEPT') AS dname2
  FROM emp_t

 

 

comm이 NULL이면 0을 표시하고, NULL이 아니면 원래 값을 표시한다.

dname이  NULL이면 "NO DEPT"를 표시하고, NULL이 아니면 원래 값을 표시한다.

 

NVL2 함수

WITH emp_t AS (
    SELECT 'JONES' ename, NULL comm, 'RESEARCH' dname FROM dual UNION ALL
    SELECT 'ALLEN' ename, 300 comm, NULL dname FROM dual
)

SELECT ename
     , comm
     , NVL2(comm, '$' || comm, '0') AS comm2
     , dname
     , NVL2(dname, 'Y', 'N')        AS dept_yn
  FROM emp_t

 

 

comm이 NULL이면 '0'을 표시하고, NULL이 아니면 원래 값에 '$'를 붙여서 표시한다.

dname이 NULL이면 'N'을 표시하고, NULL이 아니면 'Y'를 표시한다.

 

[Oracle] 오라클 NVL, NVL2 함수 사용법

오라클 NVL, NVL2 함수 사용법 해당 칼럼의 값이 NULL 값인 경우 특정값으로 출력하고 싶으면 NVL 함수를 사용하고, NULL 값이 아닐 경우 특정값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다. NVL 함

gent.tistory.com

 

댓글

Designed by JB FACTORY