繁体   English   中英

PostgreSQL获取给定年份中所有iso周的第一天和最后一天

[英]Postgresql get first and last day of all iso week in a given year

select week_num, week_start, week_end,to_char(week_start,'dd Dy Mon yyyy'), to_char(week_end,'dd Dy Mon yyyy') from(
WITH RECURSIVE t(n) AS (
    select (date_trunc('week',(date_trunc('week',(2016 || '-01-04')::date)::date - interval '1 day')::date))::date
  UNION ALL
    SELECT (n - interval '1 week')::date  FROM t WHERE  extract(WEEK from n ) > 1
)
SELECT n as week_start, (n + interval '6 days')::date as week_end, extract(WEEK from n ) as week_num  
FROM t 
) as weeks order by week_num

我写了这个postgresl脚本来获取给定年份中所有iso周的第一天和最后一天。 它运行完美,我只需要知道是否可以改进

您可以使用generate_series()避免复杂的CTE和日期算术。 这是一个使您入门的示例:

select d, d + interval '6 days'
from generate_series('2016-01-01'::date, '2016-12-31'::date, '1 day'::interval) d
where date_trunc('week', d) = d

您可能想在第二个学期中添加一个案例,以在2017年剥离所有内容,并且可以将其重写为一次一次,但您应该走上正确的道路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM