DECODE 함수는 CASE 문과 마찬가지로 IF … THEN … ELSE 문과 동일한 기능을 수행한다. 인자로 지정된 expression과 search를 비교하여, 같은 값을 가지는 search에 대응하는 result를 결과로 반환한다. 만약, 같은 값을 가지는 search가 없다면 default 값을 반환하고, default 값이 생략된 경우에는 NULL을 반환한다. 비교 연산의 대상이 되는 expression과 search는 데이터 타입이 동일하거나 서로 변환 가능해야 하고, 지정된 모든 result 값의 유효 숫자를 포함하여 표현할 수 있도록 결과 값의 소수점 아래 자릿수가 결정된다.
DECODE( expression, search, result [, search, result]* [, default] )
result :
result | default | NULL
DECODE(a, b, c, d, e)는 다음의 CASE 문장과 같은 의미를 가진다.
CASE WHEN a = b THEN c
WHEN a = c THEN d
ELSE e
END
SELECT * FROM case_tbl;
a
=============
1
2
3
NULL
--Using DECODE function to compare expression and search values one by one
SELECT a, DECODE(a, 1, 'one', 2, 'two', 'other') FROM case_tbl;
a decode(a, 1, 'one', 2, 'two', 'other')
===================================
1 'one'
2 'two'
3 'other'
NULL 'other'
--result types are converted to a single type containing all of significant figures
SELECT a, DECODE(a, 1, 1, 2, 1.2345, 1.234567890) FROM case_tbl;
a decode(a, 1, 1, 2, 1.2345, 1.234567890)
===================================
1 1.000000000
2 1.234500000
3 1.234567890
NULL 1.234567890
--an error occurs when result types are not convertible
SELECT a, DECODE(a, 1, 'one', 2, 'two', 1.2345) FROM case_tbl;
ERROR: Cannot coerce 'one' to type double.