微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取一整年每周日期范围的周数

如何解决获取一整年每周日期范围的周数

使用 sql Server,我需要按周数获取一整年每周的日期范围。一周的第一天必须是星期一,除非一周从另一年开始,否则我需要它从一年的第一天开始。

例如

如果我使用 2021 年作为参数调用选择,我希望输出是这样的:

gitk

请注意示例年份的第一个和最后一个星期数。

谢谢

解决方法

有很多方法可以解决这个问题。蛮力方法使用某种方法生成所有日期 - 这使用递归 CTE - 然后根据计算星期一的窗口函数分配周。

with cte as (
      select datefromparts(2021,1,1) as dte
      union all
      select dateadd(day,dte)
      from cte
      where dte < datefromparts(2021,12,31)
     )
select weeknum,min(dte),max(dte)
from (select cte.*,sum(case when datename(weekday,dte) = 'Monday' then 1 else 0 end) over (order by dte) as weeknum
      from cte
     ) cte
group by weeknum
option (maxrecursion 0);

这适用于一次性查询,但不是生成周的最有效方法。然而,它是递归 CTE 的一个有趣的例子。也就是说,您可能真的应该有一个日历表,将这些信息封装为一个表

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。