[Oracle] 오라클 NVL과 NVL2 차이점 쉽게 설명
- 데이터베이스/오라클
- 2023. 12. 11.
오라클에서 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'를 표시한다.