产生2个日期范围之间的星期范围

时间:2020-04-30 01:54:37

标签: sql-server

我正在使用SQL Server 2017,我需要获取2个日期范围之间的星期范围。我发现了类似的问题week ranges 但这并不能在所有情况下都起作用

代码:

declare @sDate date='2020-04-24',
@eDate date='2020-05-07';

;with cte as
(
  select @sDate StartDate, 
    DATEADD(wk, DATEDIFF(wk, 0, @sDate), 6) EndDate
  union all
  select dateadd(ww, 1, StartDate),
    dateadd(ww, 1, EndDate)
  from cte
  where dateadd(ww, 1, StartDate)<=  @eDate
)
select *
from cte

预期产量:(第一个星期为星期日)

enter image description here

1 个答案:

答案 0 :(得分:1)

由于您希望本周从星期日开始,因此锚点成员的结束日期应设置为星期六。

递归成员的开始日期仅需从cte的结束日期起增加1天

declare @sDate date = '2020-04-24',
        @eDate date = '2020-05-07';

with 
cte as
(
    select  @sDate as StartDate, 
            convert(date , dateadd(wk, datediff(wk, 0, @sDate), 5)) as EndDate

    union all

    select  dateadd(day, 1, EndDate) as StartDate,
            case when dateadd(week, 1, EndDate) <= @eDate 
                 then dateadd(week, 1, EndDate) 
                 else @eDate 
                 end as EndDate
    from    cte
    where   dateadd(day, 1, EndDate) <= @eDate
)
select  *
from    cte
相关问题