Open jowoohyeong opened 1 year ago
NVL 함수는 값이 NULL인 경우 지정값을 출력하고, NULL이 아니면 원래 값을 그래도 출력한다.
WITH emp AS (
SELECT 7839 empno, 'KING' ename, 'PRESIDENT' job, NULL comm FROM dual UNION ALL
SELECT 7654 empno, 'MARTIN' ename, 'SALESMAN' job, 1400 comm FROM dual
)
SELECT empno
, ename
, comm AS comm
, NVL(comm, 0) AS comm2 --커미션이 NULL 이면 '0'
FROM emp
NVL2 함수는 TEMP = NULL이 아닌 경우 A를 출력하고 , NULL인 경우 B를 출력합니다.
WITH emp AS (
SELECT 7839 empno, 'KING' ename, 'PRESIDENT' job, NULL comm FROM dual UNION ALL
SELECT 7654 empno, 'MARTIN' ename, 'SALESMAN' job, 1400 comm FROM dual
)
SELECT empno
, ename
, comm AS comm
, NVL2(comm, 'Y', 'N' ) AS comm2 --커미션이 NULL 이면 '0'
FROM emp
NVL2 함수를 사용할 때 NULL이 아닌경우 자신의 값을 그대로 출력할 수도 있다.
예) NVL2(comm, comm, '보너스없음')
위의 NVL, NVL2 함수를 사용하지 않고 DECODE 함수를 사용하여 같은 결과를 출력할 수 있습니다.
WITH emp AS (
SELECT 7839 empno, 'KING' ename, 'PRESIDENT' job, NULL comm FROM dual UNION ALL
SELECT 7654 empno, 'MARTIN' ename, 'SALESMAN' job, 1400 comm FROM dual
)
SELECT empno
, ename
, comm AS comm
, DECODE(comm, NULL, 0, comm) AS decode1
, DECODE(comm, NULL, 'Y', 'N') AS decode2
FROM emp
Oracle NVL, NVL2 함수 사용법
해당 컬럼의 값이 NULL 값인 경우 특정 값으로 출력하고 싶으면 NVL 함수를 사용하고, NULL 값이 아닐 경우 특정 값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다.