Oracle과 PostgreSQL에서 날짜에 대해서 년/분기/월/일/시/분/초 단위로 자르는 방법을 비교해 보았습니다. Oracle에서 PostgreSQL의 시스템으로 이행을 하는 경우 도움이 되길 바랍니다.
주의)오라클에서는 다음 SQL문을 실행하여 SYSDATE출력으로 시/분/초까지 표시하도록 합니다.
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
문법
Oracle과 PostgreSQL의 문법 차이는 다음과 같습니다.
Oracle | PostgreSQL |
---|---|
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초가 출력됩니다.
Oracle | PostgreSQL |
---|---|
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초가 출력됩니다.
Oracle | PostgreSQL |
---|---|
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초)이 출력됩니다.
Oracle | PostgreSQL |
---|---|
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초) 이 출력됩니다.
Oracle | PostgreSQL |
---|---|
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’로 동작합니다.
Oracle | PostgreSQL |
---|---|
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초)가 표시됩니다.
Oracle | PostgreSQL |
---|---|
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초 )가 표시됩니다.
Oracle | PostgreSQL |
---|---|
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밀리 초 )가 표시됩니다.
Oracle | PostgreSQL |
---|---|
SELECT CURRENT_TIMESTAMP; ———————– 2022-09-10 23:17:45.702185+09 | |
SELECT DATE_TRUNC(‘SECOND’ , CURRENT_TIMESTAMP) ; ———————– 2022-09-10 23:17:45+09 |