PostgreSQL:日期日历天间隔场景

PostgreSQL: Date Calendar Days Interval Scenario

我想打印此 table(为简洁起见仅显示 4 行):

Dates Period
01-MAR-2022 61
02-MAR-2022 61
03-MAR-2022 61
30-APR-2022 61

到目前为止我有:

SELECT CAST(TRUNC(date_trunc('month',CURRENT_DATE) + interval '-2 month') AS DATE) + (n || 'day')::INTERVAL AS Dates
, date_trunc('month',CURRENT_DATE) + interval '-2 month' + INTERVAL '2 month' - date_trunc('month',CURRENT_DATE) + interval '-2 month' AS Period
FROM generate_series(0,61) n 

请提供更好的方法来生成句点并替换 generate_series(0,61) 中的硬编码 61。

谢谢!

你到底想完成什么,不清楚也没有具体说明。顺便说一句,您的查询无效。您似乎希望列出从 2 个月的第一个日期到 1 个月之前的最后一个日期的每个数据以及该范围内的总天数。以下将给出第一个日期,使用日期减法给出天数。

with full_range( first_dt, num_days) as 
     ( select  date_trunc ('month', (current_date - interval '2 months'))::date
            ,  date_trunc ('month', (current_date - interval '1 day'))::date - 
               date_trunc ('month', (current_date - interval '2 months'))::date
     ) 
select * 
  from full_range;

有了它,您可以使用 num_days 和带有表达式

的生成序列
select generate_series(0, num_days-1) from full_range

最后结合以上得到:(见demo

with full_range( first_dt, num_days) as 
     ( select  date_trunc ('month', (current_date - interval '2 months'))::date
            ,  date_trunc ('month', (current_date - interval '1 day'))::date - 
               date_trunc ('month', (current_date - interval '2 months'))::date
     ) 
select (first_dt + n*interval '1 day')::date, num_days
  from full_range
  cross join (select generate_series(0, num_days-1) from full_range) gn(n);