【发布时间】:2019-01-08 18:32:06
【问题描述】:
我试图在每周的开始(应该是星期一)之前对查询进行分组。我有各种来自互联网的参考资料,可以使用以下代码获得一周的第一天:
DATEADD(WEEK, DATEDIFF(WEEK, 0, @Date), 0)
但是,这会返回错误的结果,如下所示:
SET DATEFIRST 7
DECLARE @Date DATE
SET @Date = '1/7/2018'
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, @Date), 0)
结果是“2018 年 1 月 8 日”。显然,一周不应从相关日期后的第二天开始。
我尝试通过“SET DATEFIRST = 1”设置星期几,但这没有影响
这是我想要完成的一个示例:
SELECT
DATEADD(WEEK, DATEDIFF(WEEK, 0, m.MeasureDT), 0) as StartOfWeek,
SUM(m.NumeratorVAL) AS Numerator
FROM
Database.Schema.Table AS m
GROUP BY
DATEADD(WEEK, DATEDIFF(WEEK, 0, m.MeasureDT), 0)
ORDER BY
DATEADD(WEEK, DATEDIFF(WEEK, 0, m.MeasureDT), 0)
因此,每周从星期一开始,但包括前一个星期日。我是否在系统级别或 SQL Server 级别设置了一些时间,或者我缺少逻辑上的缺陷?任何帮助将不胜感激。
【问题讨论】:
-
如果每周的开始应该是星期一,为什么你设置它是星期日 (
SET DATEFIRST 7)? -
对不起,安德烈,错字应该是 1,如上面的注释所示。
标签: sql-server datediff dateadd