Postgresqlで日付を列挙する方法(generate_series)

集合を返す関数generate_seriesを利用して、日付をYYYY/MM/DD形式の文字列で列挙します。

範囲を指定して日付を列挙

generate_seriesの第1引数、第2引数に日付の範囲の開始日と終了日を指定します。

select to_char(generate_series, 'YYYY/MM/DD') as ymd
  from generate_series('2021-01-03'::date, '2021-01-10', '1 day')

実行結果はこのようになります。

指定日の月の日付を列挙

generate_seriesの第1引数、第2引数に日付の範囲の開始日と終了日に同日を指定します。引数はいずれもtimestamp型にcastして、終了日の算出に+1monthsを指定して-1daysとすることで月末を取得しています。

select to_char(generate_series, 'YYYY/MM/DD') as ymd
  from generate_series( cast('2021-01-01' as timestamp)
     , date_trunc('month', cast('2021-01-01' as timestamp) + '1 months') + '-1 days', '1 days')

指定日の年の日付を列挙

指定月の取得から変更されている部分は+1 monthsの指定が+1yearsとなっている点になります。

select to_char(generate_series, 'YYYY/MM/DD') as ymd
  from generate_series( cast('2021-01-01' as timestamp)
     , date_trunc('month', cast('2021-01-01' as timestamp) + '1 years') + '-1 days', '1 days')