기본 패턴
sql
SELECT *
FROM events
WHERE created_at >= NOW() - INTERVAL '7 days';설명
- PostgreSQL에서 날짜와 시간은 단순 문자열이 아니라 별도 타입 체계입니다.
date,time,timestamp,timestamptz,interval이 각각 역할이 다릅니다. timestamp는 날짜와 시각을 함께 담고,interval은 "3 days", "2 hours"처럼 기간 자체를 표현합니다. 그래서 최근 7일 데이터처럼 시간 범위를 계산할 때NOW() - INTERVAL '7 days'패턴이 자주 등장합니다.- 중요한 선택 중 하나는 timezone 처리입니다. 여러 지역 시간을 다루는 서비스라면 보통
timestamptz를 더 자연스럽게 고려하게 됩니다. - 날짜 필터링은 보고서, 백필, 정산, 알림 배치 같은 거의 모든 데이터 작업의 중심입니다. 그래서 단순 비교뿐 아니라
date_trunc,extract, 기간 경계 감각까지 이어서 익히는 편이 좋습니다. - 성능 관점에서는 날짜 컬럼에 함수 적용을 남발하기보다, 가능한 한 컬럼을 그대로 비교하는 형태가 인덱스 활용에 유리한 경우가 많습니다.
빠른 정리
| 타입/함수 | 의미 |
|---|---|
date | 날짜만 |
timestamp | 날짜 + 시각 |
timestamptz | timezone 고려 timestamp |
interval | 기간 |
NOW() | 현재 시각 |
주의할 점
날짜 컬럼에 DATE(created_at)처럼 함수를 바로 씌우면 인덱스 활용이 어려워지는 경우가 있습니다. 가능하면
범위 비교로 바꾸는 습관이 성능 면에서 더 유리합니다.
참고 링크
2 sources