sql - 如何在 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 周的开始和结束日期
解决方案
尝试将当前周开始/结束存储在变量中,然后用于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)
推荐阅读
- android - 如何只返回可以由我的 3rd 方应用程序播放的视频?
- sql - 如何获得每个儿子递归 SQL 的古代父亲
- firebase - 超过 Firebase Auth API 配额时会发生什么
- iis - 如何指示 IIS 使用 web.config 中的环境变量来运行 .net 核心应用程序?
- python - 如何将表情符号添加到 Keras Tokenizer API?
- html - 如何通过单击(添加)按钮启用具有值的行
- python - 在 Windows 10 中从 subprocess.Popen python 在命令提示符中打开和编写命令
- node.js - 使用 Multer 的 Express 应用程序中的 Req.files 始终为空
- c# - 如何将参数和数据源同时传递给 rdlc 报告
- android - 在 Android 应用程序中上传受版权保护或令人反感的图像