【问题标题】:SQL Date - functionsSQL 日期 - 函数
【发布时间】:2016-09-30 14:49:24
【问题描述】:
   >=DateAdd("ww",-9,Date()-Weekday(Date(),0)+1))

我在一些我继承的 SQL 编码中具有上述功能,并且正在努力弄清楚它实际计算的是什么,有人可以帮忙吗?

【问题讨论】:

  • 它看起来更像是 MS Excel 或 Access 函数。
  • 我以为这是 DAX,但事实并非如此,因为 DAX 没有 DATEADD 函数。但是 T-SQL 没有 WEEKDAY 函数,所以这可能只是普通的 VBA。为您找到此代码的位置添加上下文。
  • 这些是用户定义的 SQL 函数吗?
  • @Alex:不,因为调用此类函数需要指定架构 (dbo.Date)。这不是 T-SQL。
  • @Jeroen Mostert,我怎么会忘记这个。

标签: sql-server tsql date weekday datepart


【解决方案1】:

考虑将这个 SQL 语句分解为多个部分。
它在 sql-server 12 中进行了测试,并使用 GETDATE() 而不是 Date() 函数。

select 
GETDATE() as today, 
@@DATEFIRST as first_day_of_the_week_number,
DATEPART(WEEKDAY,GETDATE()) as current_day_number_of_the_week, 
GETDATE()-DATEPART(WEEKDAY,GETDATE()) as previous_saturday, 
GETDATE()-DATEPART(WEEKDAY,GETDATE())+1 as previous_sunday,
DATEADD("ww",-9,GETDATE()-DATEPART(WEEKDAY,GETDATE())+1) as previous_sunday_9_weeks_back;

所以它会返回 9 周的星期日。

请注意,它假定 @@DATEFIRST 等于 7。
如果@@DATEFIRST 等于 1,那么它将返回 9 周前的星期一。

【讨论】:

  • 这实际上完全取决于@@DATEFIRST 的值。 (但 WeekDay 函数与 0 的第二个参数同样模棱两可。)
  • @Jeroen 不知道那个 t-sql 怪癖。感谢您的洞察力。
猜你喜欢
  • 2018-09-22
  • 2010-10-07
  • 2010-11-12
  • 2022-09-30
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多