我有这个查询来获取当前日期的星期一(星期一)。当日期是本月的第一天和星期日时,它会中断。不知道如何解决这个问题。任何帮助将受到高度赞赏。感谢。
DATEADD(wk,DATEDIFF(wk,0,'2017-01-01'),0)
答案 0 :(得分:1)
这种情况正在发生,因为你发现了没有。从第0天到提供日期的几周。 0实际上是'1900-01-01',这是星期一。因此,DATEDIFF会查找从此日期到提供的数据的已完成周数。这就是为什么2016年3月27日的DATEDIFF返回6065(因为它是一周结束)和2016年3月26日返回6064(因为它仍然不是一周结束)。 这已在此链接中解释 - Get first day of the week
答案 1 :(得分:1)
尝试下面提到的代码。那是你在寻找什么?如果有效,请告诉我
declare @date date = '2017-01-01'
select case when dateadd(dd,-datepart(dw,@date)+2,@date) < dateadd(dd,-day(@date)+1,@date)
then @date else dateadd(dd,-datepart(dw,@date)+2,@date) end as firstdayoftheweek