【发布时间】:2021-03-03 23:59:51
【问题描述】:
我正在尝试运行一个简单的查询来获取一个日期并确定该日期所在的一周的开始和结束(即,对于 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'
当我通过查询传递一个日期时,除了星期天之外,一切都正确排列。输出示例见下文:
| Date | WEEK_START | WEEK_END |
|---|---|---|
| 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 行可以解决问题,但事实并非如此。有什么想法吗?
【问题讨论】:
标签: sql sql-server