(Oracle PostgreSQL변환) 년/분기/월/일/시/분/초단위로 자르는 오라클 trunc함수를 date_trunc함수로 변환하기

Oracle DB

Oracle과 PostgreSQL에서 날짜에 대해서 년/분기/월/일/시/분/초 단위로 자르는 방법을 비교해 보았습니다. Oracle에서 PostgreSQL의 시스템으로 이행을 하는 경우 도움이 되길 바랍니다.

주의)오라클에서는 다음 SQL문을 실행하여 SYSDATE출력으로 시/분/초까지 표시하도록 합니다.

ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

문법

Oracle과 PostgreSQL의 문법 차이는 다음과 같습니다.

OraclePostgreSQL
TRUNC ( datetime , format)

format종류
——————
‘YYYY’
‘Q’ 4분기
‘MM’
‘W’ 시작 요일
‘DAY’
‘DD’
‘HH’
‘MI’
초:없음
DATE_TRUNC(fomat,timestamp)

fomat종류
———————–
‘YEAR’
분기:없음
‘MONTH’
시작 요일:없음
주:없음
‘DAY’
‘HOUR’
‘MINUTE’
‘SECOND’

연도 단위 자르기

지정한 연도의 시작 01월 01일 00시 00분 00초가 출력됩니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 14:32:38
SELECT CURRENT_TIMESTAMP;
———————–
2022-09-10 23:11:45.138055+09
SELECT TRUNC(SYSDATE, ‘YYYY’) FROM DUAL;
———————–
2022/01/01 00:00:00
SELECT DATE_TRUNC(‘YEAR’ , CURRENT_TIMESTAMP) ;
———————–
2022-01-01 00:00:00+09

4분기 단위 자르기

지정한 연도의 시작 분기(1월,4월,7월,10월)의 01일 00시 00분 00초가 출력됩니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 14:42:46
SELECT TRUNC(SYSDATE, ‘Q’) FROM DUAL;
————————
2022/07/01 00:00:00

월 단위 자르기

지정한 월의 시작 일(1일 0시 0분 0초)이 출력됩니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 14:42:46
SELECT CURRENT_TIMESTAMP;
———————–
2022-09-10 23:12:59.927112+09
SELECT TRUNC(SYSDATE, ‘MM’) FROM DUAL;
———————–
2022/09/01 00:00:00
SELECT DATE_TRUNC(‘MONTH’ , CURRENT_TIMESTAMP) ;
———————–
2022-09-01 00:00:00+09

주 단위 자르기

지정한 주의 시작 요일(0시 0분 0초) 이 출력됩니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 17:19:16
SELECT TRUNC(SYSDATE, ‘W’) FROM DUAL;
———————–
2022/09/08 00:00:00

일 단위 자르기

지정한 일의 시작 시간(0시 0분 0초)이 출력됩니다. 포맷‘DD’을 지정하지 않아도 기본 ‘DD’로 동작합니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 17:15:09
SELECT CURRENT_TIMESTAMP;
2022-09-10 23:13:47.179146+09
SELECT TRUNC(SYSDATE, ‘DD’) FROM DUAL;
SELECT TRUNC(SYSDATE) FROM DUAL;
———————–
2022/09/10 00:00:00
SELECT DATE_TRUNC(‘DAY’ , CURRENT_TIMESTAMP) ;
2022-09-10 00:00:00+09

시간 단위 자르기

지정한 날짜/시간의 시작 분(00분 00초)가 표시됩니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 17:13:14
SELECT CURRENT_TIMESTAMP;
2022-09-10 23:14:39.370615+09
SELECT TRUNC(SYSDATE, ‘HH’) FROM DUAL;
———————–
2022/09/10 17:00:00
SELECT DATE_TRUNC(‘HOUR’ , CURRENT_TIMESTAMP) ;
2022-09-10 23:00:00+09

분 단위 자르기

지정한 날짜/시간의 시작 초(00초 )가 표시됩니다.

OraclePostgreSQL
SELECT SYSDATE FROM DUAL;
———————–
2022/09/10 17:10:44
SELECT CURRENT_TIMESTAMP
———————–
2022-09-10 23:16:07.892894+09
SELECT TRUNC(SYSDATE, ‘MI’) FROM DUAL;
———————–
2022/09/10 17:10:00
SELECT DATE_TRUNC(‘MINUTE’ , CURRENT_TIMESTAMP) ;
———————–
2022-09-10 23:16:00+09

초 단위 자르기

지정한 날짜/시간의 시작 밀리 초(0밀리 초 )가 표시됩니다.

OraclePostgreSQL
SELECT CURRENT_TIMESTAMP;
———————–
2022-09-10 23:17:45.702185+09
SELECT DATE_TRUNC(‘SECOND’ , CURRENT_TIMESTAMP) ;
———————–
2022-09-10 23:17:45+09

제목과 URL을 복사했습니다