【问题标题】:Start of the week (Monday) - Query gives an incorrect date一周开始(星期一) - 查询给出的日期不正确
【发布时间】:2016-03-30 04:20:40
【问题描述】:

我有这个查询来获取当前日期的一周(星期一)的开始。当日期是月初和星期日时,它会中断。不知道如何解决这个问题。任何帮助将不胜感激。谢谢。

DATEADD(wk,DATEDIFF(wk,0,'2017-01-01'),0)

【问题讨论】:

  • 我在查询中使用了这个:SET DATEFIRST 1 select DATEADD(dd, (1-DATEPART(dw, '2017-01-01')), '2017-01-01')(需要 SET DATEFIRST 1 来修复 DBA 默认留下的美国日期样式)
  • 我试过 SET DATEFIRST 1,问题依然存在。

标签: sql tsql sql-server-2012


【解决方案1】:

发生这种情况是因为您发现没有。从日期 0 到提供的日期的周数。 0 实际上是星期一的“1900-01-01”。因此,DATEDIFF 查找从该日期到提供数据的完整周数。这就是为什么 2016 年 3 月 27 日的 DATEDIFF 返回 6065(因为它是一周的结束)和 2016 年 3 月 26 日的返回 6064(因为它仍然不是一周的结束)。 这已经在这个链接中解释了 - Get first day of the week

【讨论】:

  • 谢谢。该链接很有帮助。
【解决方案2】:

试试下面提到的代码。那是你要找的吗?让我知道这是否有效

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

【讨论】:

  • 它给了我 2017/01/02。该日期的一周开始时间应为 2017 年 12 月 26 日。
猜你喜欢
  • 2020-03-24
  • 2012-11-27
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2023-03-28
  • 2017-07-19
相关资源
最近更新 更多