sql - 如何让我的日期与每周的开始/结束正确对齐?
问题描述
我正在尝试运行一个简单的查询来获取日期并确定日期所在的一周的开始和结束(即,对于 2021 年 3 月 3 日,WEEKSTART 值将是 3/1/2021,WEEKEND 值将是 2021 年 3 月 7 日)。
SET DATEFIRST 1;
SELECT
CAST(DD.Date as Date) AS DATE_
,CONVERT(Date, dateadd(wk, datediff(wk, 0, CAST(DD.Date as Date)), 0)) AS WEEK_START
,CONVERT(Date, dateadd(wk, datediff(wk, 0, CAST(DD.Date as Date)), 0)+6) AS WEEK_END
FROM DimDate DD
WHERE DateSkey BETWEEN '20210101' AND '20210301'
当我通过查询传递一个日期时,除了星期天之外,一切都正确排列。请参阅下面的输出示例:
日期 | WEEK_START | 周末 |
---|---|---|
2021-02-22 | 2021-02-22 | 2021-02-28 |
2021-02-23 | 2021-02-22 | 2021-02-28 |
2021-02-24 | 2021-02-22 | 2021-02-28 |
2021-02-25 | 2021-02-22 | 2021-02-28 |
2021-02-26 | 2021-02-22 | 2021-02-28 |
2021-02-27 | 2021-02-22 | 2021-02-28 |
2021-02-28 | 2021-03-01 | 2021-03-07 |
上述示例的问题在于,星期日值 (2021-02-28) 的 WEEK_START 必须为 2021-02-22,WEEK_END 必须为 2021-02-28。我认为 SET DATEFIRST 1 行可以解决问题,但事实并非如此。有什么想法吗?
解决方案
对你起作用吗?
SET DATEFIRST 1;
DECLARE
@d date='2021-02-28'
select @d [Date]
,DATEADD(dd, -DATEPART(dw, @d)+1, @d) WEEK_START
,DATEADD(dd, 7-DATEPART(dw, @d), @d) WEEK_END
输出:
Date WEEK_START WEEK_END
2021-02-28 2021-02-22 2021-02-28
推荐阅读
- laravel - 我有一个关于 laravel 迁移的奇怪问题
- udp - 如何配置 Traefik UDP Ingress?
- indexing - mariadb 没有使用复合索引的所有字段
- java - arraylist 用什么代替 charAt
- swift - 在终端中为另一个应用程序编写一些代码时应用程序的互联网连接丢失
- sockets - 基于clientIP的sessionAffinity不为TCP请求后的新UDP请求维护
- windows - 使用 Powershell 以方便的格式列出系统信息
- ssl - FIPS 模式与 NON-FIPS 模式下密码套件列表的差异
- ubuntu - 尝试通过substrate-front-end-template访问Substrate节点错误{“isTrusted”:true}
- google-sheets - Google Sheet 将 ArrayFormula 与 textjoin 结合使用