【问题标题】:Trying to calculate the number of days since 1/1/1900 and the DateDiff function is off试图计算自 1900 年 1 月 1 日以来的天数,并且 DateDiff 函数已关闭
【发布时间】:2019-05-21 15:24:01
【问题描述】:

我正在尝试计算从 1900 年 1 月 1 日到 2019 年 5 月 1 日之间过去的天数。

我已经尝试过使用几个日期并得到相同的结果。 返回的值是休息 2 天。

--
-- calculate the number of days between 1/1/1900 and 5/1/2018
--
SELECT DATEDIFF(DAY,CONVERT(DATE,'1/1/1900'),CONVERT(DATE,'5/1/2018'))

预期结果:43221 实际结果:43219

感谢您的帮助!

【问题讨论】:

  • 只是好奇:你怎么知道是 43221?
  • 43219 在我看来是正确的。您是否患有 Excelitis,也许? Excel 对哪些年份是闰年有一些错误的想法。
  • Excel 和 SQL Server 的日期 0 的值不同。如果你比较两者,它们是不一样的。
  • 例如,在 SQL Server 05 Jan 2018 中是 43103,在 Excel 中是 43105(这两个值都不是您拥有的值)。
  • omnicalculator.com/other/… 也告诉我 43219 是正确的

标签: sql-server datediff


【解决方案1】:

DATEDIFF 返回两个日期之间 的天数。因此,如果您希望将 1900-01-01 编号为第 1 天,那么您必须在从 DATEDIFF 获得的任何差异上加 1。在 Excel 中,第 0 天是 1899-12-31。

其次,Excel 将 1900 年视为闰年,并具有 1900 年 2 月 29 日(Excel 编号系统 iirc 中的第 60 天)。这是 Lotus 1-2-3 的保留,最初使用简化的闰年算法(将每年可被 4 整除的年份视为闰年),并保持向后兼容性

如果您将这两个错误结合起来,这些错误会导致您的结果偏二。

【讨论】:

  • 谢谢大家的回复,我很感激。我正在使用一个在线应用程序,它通过 URL 传递在表单中输入的日期信息。我输入的日期范围是:2018 年 5 月 1 日 - 2019 年 5 月 1 日 URL 中传递的值是:43221 - 43586 我以此为基础,假设 DateDiff 函数给了我错误的结果。现在我想起来了,在应用程序的背景中可能有一些魔法,我不知道它被用来生成值......我不确定。无论如何...谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多