DECODE 함수는 Oracle과 PostgreSQL에서 함수 사용법에 차이가 있습니다. 본 글에서는 Oracle의 DECODE 함수를 PostgreSQL에서 어떠한 명령으로 대체하여 동일한 결과를 도출할 수 있는지를 설명합니다.
DECODE 함수 Oracle과 PostgreSQL비교
Oracle과 PostgreSQL에서 사용되는 DECODE함수에 대한 차이점은 다음과 같습니다.
Oracle DECODE함수 사용법
Oracle에서는 다음과 같이 조건 분기문으로 사용됩니다. numeric 타입 no 항목에 대해 2로 나눈 나머지를 구하는 함수 mod(no, 2)의 계산 결과가 0이면 even을 출력하고 1이면 odd를 출력합니다.
다음 ddl, dml문으로 1, 2, 3, 4, 5 데이터를 작성합니다.
create table testtable (
no numeric
);
insert into testtable values ( 1 );
insert into testtable values ( 2 );
insert into testtable values ( 3 );
insert into testtable values ( 4 );
insert into testtable values ( 5 );
다음 SQL문으로 no 항목의 1, 2, 3, 4, 5 데이터를 대상으로 2로 나눈 나머지를 구하는 함수 mod(no, 2)를 실행합니다.
SQL> select mod(no,2) from testtable;
MOD(NO,2)
----------
1
0
1
0
1
DECODE 함수는 mod(no,2) 계산 결과가 0이면 even을 출력하고 1이면 odd를 출력합니다.
SQL> SELECT DECODE(mod(no,2),0,'even',1,'odd') from testtable;
DECODE(M
--------
odd
even
odd
even
odd
PostgreSQL DECODE함수 사용법
PostgreSQL에서는 다음과 같이 암호화/복호화 함수로서 사용됩니다.
C:\> psql -d postgres
# select encode('Zinnunkebi.com','base64');
encode
----------------------
WmlubnVua2ViaS5jb20=
(1개 행)
# select decode('WmlubnVua2ViaS5jb20=','base64');
decode
--------------------------------
\x5a696e6e756e6b6562692e636f6d
(1개 행)
# select encode(decode('WmlubnVua2ViaS5jb20=','base64'),'escape');
encode
----------------
Zinnunkebi.com
(1개 행)
Oracle DECODE함수에 대한 PostgresSQL의 대체 명령
PostgreSQL에서 DECODE 함수를 사용하면 다음과 같이 ERROR가 발생합니다.
C:\> psql -d postgres
# SELECT DECODE(mod(no,2),0,'even',1,'odd') from testtable;
ERROR: function decode(numeric, integer, unknown, integer, unknown) does not exist
줄 1: SELECT DECODE(mod(no,2),0,'even',1,'odd') from testtable;
^
힌트: No function matches the given name and argument types. You might need to add explicit type casts.
PostgreSQL에서 SQL문에 조건식을 사용하려면 CASE WHEN THEN ELSE END문을 사용합니다.
# select CASE mod(no,2) WHEN 0 THEN 'even' WHEN 1 THEN 'odd' END FROM testtable;
case
------
odd
even
odd
even
odd
(5개 행)
댓글