Oracle NVL, NVL2 함수 - NULL 처리



Oracle에서 NULL 값을 다른 값으로 대체하는 함수들입니다.



NVL 함수


-- 기본 문법: NVL(값, 대체값)
-- 값이 NULL이면 대체값 반환

SELECT NVL(email, "없음") FROM users;
SELECT NVL(salary, 0) FROM employees;
SELECT NVL(nickname, name) FROM users;


NVL2 함수


-- 기본 문법: NVL2(값, NULL이_아닐때, NULL일때)

SELECT NVL2(email, "등록됨", "미등록") FROM users;
SELECT NVL2(bonus, salary + bonus, salary) FROM employees;


COALESCE 함수 (표준 SQL)


-- 여러 값 중 첫 번째 NOT NULL 반환
SELECT COALESCE(mobile, phone, email, "연락처없음") FROM users;


NULLIF 함수


-- 두 값이 같으면 NULL 반환
SELECT NULLIF(status, "N/A") FROM data;
-- status가 "N/A"면 NULL, 아니면 status 값


실전 예시


-- 급여 계산 (수당이 NULL일 수 있음)
SELECT name,
salary,
NVL(bonus, 0) as bonus,
salary + NVL(bonus, 0) as total
FROM employees;

-- 상태 표시
SELECT name,
NVL2(resign_date, "퇴사", "재직중") as status
FROM employees;

-- 우선순위 연락처
SELECT name,
COALESCE(mobile, office_phone, home_phone) as contact
FROM employees;


비교








함수용도
NVLNULL을 기본값으로 대체
NVL2NULL 여부에 따라 다른 값
COALESCE여러 값 중 첫 번째 NOT NULL
NULLIF특정 값을 NULL로 변환