在SQL中查询本周的所有项目

时间:2016-03-17 09:55:46

标签: sql-server datetime

我有一个查询,选择给定周的所有项目,并将其日期设置为该周的开始日期。在某些情况下,查询为给定项设置了错误的日期值,并且我已将问题跟踪为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函数表现得像这样以及任何想法如何修复它?

2 个答案:

答案 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