我正在使用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
预期产量:(第一个星期为星期日)
答案 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