DB/Postgresql

Oracle To PostgreSQL 작업 하다 배운것

seungdols 2022. 4. 15. 23:03

nvl => COALESCE으로 대체

nvl 함수는 null이면, 다른값으로 치환 해주는 함수이다.

오라클에서는 정말 잘 쓰이지만, postgresql에서는 해당 함수가 없다.

COALESCE이란 함수가 있기에 대체가 가능하다.

decode => CASE WHEN 으로 대체

오라클에서 자주 사용하는 조건문 함수 decode가 postgresql에는 없다.

CASE WHEN [COLUMN] IS NULL THEN 'N' ELSE [COLUMN] END AS [COLUMN]형태로 바꿔서 사용이 가능하다.

날짜 값에서 특정 시간 만큼 빼기 - mybatis에서 파라미터로 넘겨줄 때 처리

보통 오라클에서 쓸때는 아래처럼 사용 했다.

(SYSDATE - 60/60/24)

이걸 mybatis로 바꾸면 아래와 같다.

(SYSDATE - #{diff}/60/24)

그럼 이제 diff 값은 파라미터로 전달만 해주면 된다.

문제는 postgresql에서는 위와 같은 방식으로 해결이 안된다.

(current_timestamp - INTERVAL '12' hour)

위와 같이 INTERVAL에 시간 그리고 단위를 문자열로 붙여줘야 된다.

처음에 이것 때문에, mybatis에서 구문 오류가 발생하여 삽질을 좀 했다.

mybatis에서 아래처럼 하면 정상적으로 동작 한다.

current_timestamp - INTERVAL '${diff} min'

주로, mybatis에서는 #{}를 많이 사용했는데, 여기는 어쩔 수 없이 위와 같이 해결 했다.

반응형