我有一个查询,选择给定周的所有项目,并将其日期设置为该周的开始日期。在某些情况下,查询为给定项设置了错误的日期值,并且我已将问题跟踪为DATEDIFF或DATEADD函数。
查询
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, DateTimeValue), 0) AS NewDateTimeValue
让我们以2016年3月27日为例。 DATEDIFF返回值6065,带有该值的DATEADD返回2016年3月28日。
2016年3月26日,DATEDIFF将于2016年3月21日返回6064和DATEADD。
对我而言,这听起来像是FirstDayOfWeek问题,并且SQL Server认为星期日是一周的第一天,因此在星期日和星期六(2016年3月27日是星期日)给出不同的值。
我试图通过
设置一周的第一天SET DATEFIRST 1
但是没有任何区别,SQL返回了相同的结果。
那么是什么导致SQL函数表现得像这样以及任何想法如何修复它?
答案 0 :(得分:0)
我发现DATEDIFF不尊重DATEFIRST设置,并且始终假设星期日开始一周。这就是我的样本案例工作原理的原因。此问题有一些建议的解决方法:Is it possible to set start of week for T-SQL DATEDIFF function?
答案 1 :(得分:0)
这种情况正在发生,因为你发现了没有。从第0天到提供日期的几周。 0实际上是' 1900-01-01'这是星期一。因此,DATEDIFF
查找从此日期到提供的数据的已完成周数。这就是2016年3月27日DATEDIFF
返回6065(因为它是一周结束)和2016年3月26日返回6064(因为它仍然不是一周结束)的原因。
这已在此链接中解释 - Get first day of the week