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
'빅데이터 관련 자료 > [SQL] Basic' 카테고리의 다른 글
윈도우 프레임 SQL : ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING (0) | 2024.04.11 |
---|---|
SQL에서의 FIRST_VALUE 함수 : 활용, 예제, 주의할 점 (0) | 2024.04.08 |
[전부 모음] Mysql 날짜 관련된 함수 (0) | 2024.03.02 |
PostgreSQL 과 MySQL 큰 차이 (0) | 2024.02.29 |
generate_series 함수 (0) | 2024.02.21 |