NVL2 함수는 세 개의 인자가 지정되며, 첫 번째 연산식(expr1)이 NULL이 아니면 두 번째 연산식(expr2)을 반환하고, NULL이면 세 번째 연산식(expr3)을 반환한다.
NVL2 함수는 인자의 타입 중 우선순위가 가장 높은 타입으로 모든 인자를 변환하여 연산을 수행한다. 인자 중에 같은 타입으로 변환할 수 없는 타입의 인자가 있으면 모든 인자를 VARCHAR 타입으로 변환한다. 아래는 입력 인자의 타입에 따른 변환 우선순위를 나타낸 것이다.
예를 들어 a의 타입이 INT, b의 타입이 BIGINT, c의 타입이 SHORT이면 NVL2(a, b, c)는 BIGINT 타입을 반환한다. 만약 a의 타입이 INTEGER, b의 타입이 DOUBLE, c의 타입이 TIMESTAMP이면 NVL2(a, b, c)는 VARCHAR 타입을 반환한다.
NVL2( expr1, expr2, expr3 )
result :
expr2 | expr3
SELECT * FROM case_tbl;
a
=============
1
2
3
NULL
--returning a specific value of INT type
SELECT a, NVL2(a, a+1, 10.5678) FROM case_tbl;
a nvl2(a, a+1, 10.5678)
====================================
1 2
2 3
3 4
NULL 11