Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 生成两个日期范围之间的周范围_Sql Server - Fatal编程技术网

Sql server 生成两个日期范围之间的周范围

Sql server 生成两个日期范围之间的周范围,sql-server,Sql Server,我正在使用SQL Server 2017,我需要获取两个日期范围之间的周范围。我发现了一个类似的问题 但它不会在所有情况下都起作用 代码: 预期产出:第一周为周日 由于您希望本周从星期天开始,那么锚定成员的结束日期应设置为星期六 递归成员的开始日期仅从cte的结束日期加上1天 declare @sDate date = '2020-04-24', @eDate date = '2020-05-07'; with cte as ( select @sDate as S

我正在使用SQL Server 2017,我需要获取两个日期范围之间的周范围。我发现了一个类似的问题 但它不会在所有情况下都起作用

代码:

预期产出:第一周为周日


由于您希望本周从星期天开始,那么锚定成员的结束日期应设置为星期六

递归成员的开始日期仅从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

@smor我添加了解决方案的代码。。我已经提到了输入…请在评论之前检查一下-有一个日历表是值得的,它的重量是金色的-@Harry thnks..但我实际上需要每周信息,而不是每天
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