(Oracle PostgreSQL변환) Oracle의 DECODE함수를 PostgreSQL의 CASE WHEN THEN문으로 대체하기

스폰서 링크
Oracle DB
스폰서 링크

이 글에서는 OracleDECODE 함수와 PostgreSQLDECODE 함수의 차이점과 OracleDECODE 함수를 PostgreSQL의 어떤 명령으로 변경해야 동일한 결과를 얻을 수 있는지에 대해 소개하겠습니다.

스폰서 링크

DECODE 함수 Oracle과 PostgreSQL비교

OraclePostgreSQL에서 사용되는 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개 행)

결론

Oracle DECODE 함수에 대한 PostgresSQL의 대체 명령은 CASE WHEN THEN ELSE END 입니다.

댓글

제목과 URL을 복사했습니다