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);
我想打印此 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);