IFNULL 함수와 NVL 함수는 유사하게 동작하며, NVL 함수는 집합형 데이터 타입을 추가로 지원한다. 두 개의 인자가 지정되며, 첫 번째 인자 expr1이 NULL이 아니면 expr1을 반환하고, NULL이면 두 번째 인자인 expr2를 반환한다. 각 함수가 결과로 반환하는 데이터 타입은 expr1과 expr2 타입에 따라 아래의 표와 같다.
expr1 타입 |
expr2 타입 |
NVL 번환 값 타입 |
IFNULL 반환 값 타입 |
---|---|---|---|
? |
? |
에러 |
VARCHAR |
? |
X |
X 타입 |
VARCHAR |
CHAR |
VARCHAR |
VARCHAR |
VARCHAR |
CHAR |
NCHAR |
에러 |
VARCHAR |
VARCHAR |
NCHAR |
VARCHAR |
VARCHAR |
스트링 타입 |
숫자 타입 |
에러 |
VARCHAR |
스트링 타입 |
날짜/시간 타입 |
에러 |
VARCHAR |
숫자 타입 |
날짜/시간 타입 |
에러 |
VARCHAR |
날짜/시간 타입 |
날짜/시간 타입 |
공통으로 변환 가능한 타입 |
VARCHAR |
숫자 타입 |
숫자 타입 |
공통으로 변환 가능한 타입 |
공통으로 변환 가능한 타입 |
집합형 타입 |
집합형 타입 |
공통으로 변환 가능한 타입 |
에러 |
집합형 타입 |
그 외 타입 |
에러 |
에러 |
IFNULL( expr1, expr2 )
NVL( expr1, expr2 )
result :
expr1 | expr2
IFNULL(a, b) 또는 NVL(a, b)는 다음의 CASE 문장과 같은 의미를 가진다.
CASE WHEN a IS NULL THEN b
ELSE a
END
SELECT * FROM case_tbl;
=== <Result of SELECT Command in Line 1> ===
a
=============
1
2
3
NULL
--returning a specific value when a is NULL
SELECT a, NVL(a, 10.0000) FROM case_tbl;
=== <Result of SELECT Command in Line 1> ===
a nvl(a, 10.0000)
===================================
1 1.0000
2 2.0000
3 3.0000
NULL 10.0000
--IFNULL can be used instead of NVL and return values are converted to the string type
SELECT a, IFNULL(a, 'UNKNOWN') FROM case_tbl;
a ifnull(a, 'UNKNOWN')
===================================
1 '1'
2 '2'
3 '3'
NULL 'UNKNOWN'