首页 > 解决方案 > 如何在 MSSQL 中获取最近 6 周的开始日期和结束日期

问题描述

例如,今天是2021 年 2 月 18 日,那么开始日期是 2021 年 2 月 14 日,结束日期是 2021 年 2 月 20 日。

过去 3 周的这些方式将是:

星期 开始日期 结束日期
第 1 周 2021 年 2 月 14 日 2021 年 2 月 20 日
第 2 周 2021 年 2 月 7 日 2021 年 2 月 13 日
第 3 周 2021 年 1 月 31 日 2021 年 2 月 6 日

这里第 1 周是当前周,第 2 周是第 1 周的前一周,依此类推

我试过下面的脚本:

select cast(DATEADD(dd, -(DATEPART(dw, getdate())-1), getdate()) as date) [Week1 start]

select cast(DATEADD(dd, 7-(DATEPART(dw, getdate())), getdate()) as date) [Week1 End]

select cast(DATEADD(dd, -8-(DATEPART(dw, getdate())-2), getdate()) as date) [Week2 start]

select cast(DATEADD(dd, -14-(DATEPART(dw, getdate())-2), getdate()) as date) [Week2 END]

显示错误的输出,可以通过指出我出错的地方来帮助我,或者替代获取最后 6 周的开始和结束日期

标签: sqlsql-server

解决方案


尝试将当前周开始/结束存储在变量中,然后用于DATEADD计算前几周:

declare @weekStart date = cast(DATEADD(dd, -(DATEPART(dw, getdate())-1), getdate()) as date)
declare @weekEnd date = cast(DATEADD(dd, 7-(DATEPART(dw, getdate())), getdate()) as date)

select @weekStart, @weekEnd
union all
select DATEADD(dd, -7, @weekStart), DATEADD(dd, -7, @weekEnd)
union all
select DATEADD(dd, -7 * 2, @weekStart), DATEADD(dd, -7  * 2, @weekEnd)

演示在这里


推荐阅读