PostgreSQL조회와 필터링

날짜, 시간, interval 기본

timestamp, date, interval이 어떻게 다르고, 기간 계산과 시간 필터링을 어떻게 읽어야 하는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

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날짜 + 시각
timestamptztimezone 고려 timestamp
interval기간
NOW()현재 시각

주의할 점

날짜 컬럼에 DATE(created_at)처럼 함수를 바로 씌우면 인덱스 활용이 어려워지는 경우가 있습니다. 가능하면 범위 비교로 바꾸는 습관이 성능 면에서 더 유리합니다.

참고 링크

2 sources