【问题标题】:Why doesn't datediff for week work?为什么 datediff 一周不工作?
【发布时间】:2013-04-18 13:51:54
【问题描述】:

这是一个需要一段时间才能找到的错误。我把它贴在这里是为了避免别人犯这个错误。

(一旦找到它就非常简单,但它很容易犯 - 并且代价高昂 - 错误。)

为什么select datediff(w, getdate()-7, getdate()) 给出的是 7 而不是 1?

【问题讨论】:

  • 1 分钟前提问 ... -> 19 秒前回答... 你在写这个问题的时候想到了答案吗?跨度>
  • 我在发帖时已经有了答案……经过大量搜索和一些心烦意乱的客户。我打算帮助其他像我一样陷入困境的人。我知道这在 SO 上并不少见。

标签: sql-server-2008 tsql date


【解决方案1】:

w 被解释为天数。从未提及here,但莫名其妙地似乎意味着天。 (我不知道为什么这不会像datediff(foo, getdate()-7, getdate()) 那样给出错误......)

星期的正确单位是wwwk

编辑:@Lamak 说 w 是工作日而不是白天。关于w,没有任何(我可以找到)记录,但这可能是正确的。

【讨论】:

  • 停止使用任何类型的速记。猜猜DATEPART(Y, GETDATE()); 产生了什么?
  • 你不能只在那个参数上使用任何东西,foo 就是其中之一。但是wweekday,所以接受了,结果是正确的。但是,正如 Aaron 所说,您应该始终使用 WEEKWEEKDAY 或全名
  • 一年中的某一天,如文档所示:msdn.microsoft.com/en-us/library/ms174420.aspx。仅供参考,我在该文档中没有看到任何 except 简写。
  • @Paul,你 100% 没听懂我的意思。如果您面前没有文档,您会猜到吗?你的读者、老板、同事也会做出如此精明的猜测吗?如果您的意思是 WEEK,请说 WEEK。输入三个额外的字符并且绝对清晰明确并没有什么坏处。
  • @PaulDraper 你是什么意思除了速记之外什么都看不到?Abbreviations 是速记,datepart 是你应该使用的完整名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2013-03-09
  • 2018-08-05
  • 2012-06-13
  • 1970-01-01
  • 2018-02-23
相关资源
最近更新 更多