[전부 모음] PostgreSQL 날짜 관련된 함수
잡학다식의 지식공방

빅데이터 관련 자료/[SQL] Basic

[전부 모음] PostgreSQL 날짜 관련된 함수

carpe08 2024. 3. 4. 17:04
320x100

PostgreSQL 날짜 및 시간 함수 총정리

PostgreSQL에서 날짜 및 시간을 차지하고 조작하기 위한 유용한 함수들을 예시와 함께 총정리해 보입니다.


✅ 기본 시간 함수

함수 설명 예시

NOW() 현재 날짜와 시간 반환 SELECT NOW(); → 2025-04-04 06:32:12.123456+09
CURRENT_DATE 현재 날짜만 반환 SELECT CURRENT_DATE; → 2025-04-04
CURRENT_TIMESTAMP 현재 날짜와 시간 반환 SELECT CURRENT_TIMESTAMP;
LOCALTIME 타임존 없는 현재 시간 SELECT LOCALTIME;
LOCALTIMESTAMP 타임존 없는 현재 날짜 + 시간 SELECT LOCALTIMESTAMP;
CLOCK_TIMESTAMP() 함수 호출 시점의 시간 반환 SELECT CLOCK_TIMESTAMP();
STATEMENT_TIMESTAMP() SQL 실행 시작 시간 반환 SELECT STATEMENT_TIMESTAMP();
TRANSACTION_TIMESTAMP() 현재 트랜션이 시작된 시간 반환 SELECT TRANSACTION_TIMESTAMP();

🧩 날짜 구성 및 변환 함수

함수 설명 예시

MAKE_DATE(year, month, day) 연, 월, 일 조합 SELECT MAKE_DATE(2025, 4, 4); → 2025-04-04
MAKE_TIME(hour, minute, second) 시, 분, 초 조합 SELECT MAKE_TIME(14, 30, 0); → 14:30:00
MAKE_TIMESTAMP(year, month, day, hour, minute, second) 날짜 + 시간 조합 SELECT MAKE_TIMESTAMP(2025, 4, 4, 14, 30, 0);
TO_DATE(str, format) 문자열 → 날짜 SELECT TO_DATE('20250404', 'YYYYMMDD');
TO_TIMESTAMP(str, format) 문자열 → 타임스탬프 SELECT TO_TIMESTAMP('2025-04-04 14:30:00', 'YYYY-MM-DD HH24:MI:SS');
TO_CHAR(timestamp, format) 날짜/시간 → 문자열 SELECT TO_CHAR(NOW(), 'YYYY-MM-DD');

📆 날짜 자르기 및 추출 함수

함수 설명 예시

DATE_TRUNC('unit', ts) 지정 날짜 단위로 잘라주기 SELECT DATE_TRUNC('month', NOW()); → 2025-04-01 00:00:00
DATE_PART('unit', ts) 특정 단위 추출 SELECT DATE_PART('year', NOW()); → 2025
EXTRACT(unit FROM ts) DATE_PART 과 동일 SELECT EXTRACT(DAY FROM NOW()); → 4
DATE(ts) 날짜만 추출 SELECT DATE(NOW()); → 2025-04-04
TIME(ts) 시간만 추출 SELECT TIME(NOW()); → 14:32:12.123456

🧲 날짜 연산 함수

함수 설명 예시

AGE(end, start) 두 날짜간 차이 계산 SELECT AGE('2025-04-04', '2020-01-01'); → 5 years 3 mons 3 days
AGE(date) 현재와의 차이 SELECT AGE(DATE '2000-01-01');
EXTRACT(EPOCH FROM ts1 - ts2) 차이를 초 단위(EPOCH)로 반환 SELECT EXTRACT(EPOCH FROM NOW() - TIMESTAMP '2025-01-01');
JUSTIFY_DAYS(interval) 일 기본 정규화 SELECT JUSTIFY_DAYS(INTERVAL '35 hour'); →  1 day 11:00:00
JUSTIFY_HOURS(interval) 시간 정규화 SELECT JUSTIFY_HOURS(INTERVAL '27 hours'); → 1 day 3 hours
JUSTIFY_INTERVAL(interval) 날짜+시간 정규화 SELECT JUSTIFY_INTERVAL(INTERVAL '1 mon 35 days');

⏱ INTERVAL 관련

구문 설명 예시

INTERVAL '1 day' 1일 간격 생성 SELECT NOW() + INTERVAL '1 day';
timestamp + INTERVAL '3 hours' 시간 더하기 SELECT NOW() + INTERVAL '3 hours';
timestamp - INTERVAL '7 days' 날짜 빼기 SELECT NOW() - INTERVAL '7 days';

📜 기호 함수

함수 설명 예시

SET TIMEZONE 'Asia/Seoul' 세션의 타임존 설정 SET TIMEZONE 'Asia/Seoul';
AT TIME ZONE 'UTC' 특정 타임존으로 변환 SELECT NOW() AT TIME ZONE 'UTC';
ISFINITE(timestamp) 유한적 날짜인지 검사 SELECT ISFINITE(TIMESTAMP '2025-04-04');
OVERLAPS 두 기간이 걸친다면 TRUE SELECT (TIMESTAMP '2025-04-01', TIMESTAMP '2025-04-10') OVERLAPS (TIMESTAMP '2025-04-05', TIMESTAMP '2025-04-15');

🤔 참고 단위

  • year, month, day, hour, minute, second
  • week, quarter, decade, century, millennium
  • epoch → 초 단위 (유니스 시간)

💡 실용 예제 

1. 최근 30일 내 주문 보기

SELECT * FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';

2. 다음 월의 첫날 구하기

SELECT DATE_TRUNC('month', NOW()) + INTERVAL '1 month';

3. 신입일이 주말인 사용자

SELECT * FROM users
WHERE EXTRACT(DOW FROM joined_at) IN (0, 6); -- 0: 일요일, 6: 토요일

(추가, 함수마다 다르지만 대부분 가능)

✂️ 자를 수 있는 단위들

단위설명
'year' 연도 시작 (YYYY-01-01 00:00:00)
'quarter' 분기 시작
'month' 월 시작 (YYYY-MM-01 00:00:00)
'week' 주 시작 (월요일 기준)
'day' 해당 일 자정
'hour' 해당 시각의 정각
'minute' 분 단위로 자르기
'second' 초 단위 (소수점 이하 제거용)

 

320x100
320x100