SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기
데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다.
1. 🗓️ 일별 날짜 목록 생성하기
2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다.
WITH date_series AS (
SELECT
DATE(GENERATE_SERIES(
TO_DATE('2020-01-01', 'YYYY-MM-DD'),
TO_DATE('2020-12-31', 'YYYY-MM-DD'),
'1 day'
)) AS DATE
)
SELECT DATE
FROM date_series
이 쿼리는 WITH 절(CTE)을 사용하여 date_series라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다.
결과 (일별 출력)
2. 📅 월별 날짜 목록 생성하기
동일한 원리로, 간격을 '1 MONTH'로 변경하면 월별 목록을 생성할 수 있습니다. TO_CHAR 함수를 사용하면 YYYY-MM 형식으로 깔끔하게 포맷팅할 수 있습니다.
SELECT TO_CHAR(DATE,'YYYY-MM') AS DT
FROM (
WITH date_series AS (
SELECT
DATE(GENERATE_SERIES(
TO_DATE('2020-01-01', 'YYYY-MM-DD'),
TO_DATE('2020-12-31', 'YYYY-MM-DD'),
'1 MONTH'
)) AS DATE
)
SELECT DATE
FROM date_series
) G
결과는 다음과 같이 2020년의 1월부터 12월까지 월별로 출력됩니다.
댓글
댓글 쓰기