【问题标题】:SQL Server and excel date to number conversion give differenceSQL Server 和 excel 日期到数字的转换有区别
【发布时间】:2016-11-08 07:51:38
【问题描述】:

在 Excel 中,日期 31.10.2015 在单元格 H9 中,如果我将公式放在其他单元格 = H9+A 中,我会收到单元格 42308A。

在 SQL Server 中,我使用 CONVERT(varchar, CONVERT(int, CONVERT(datetime, [Due Date]))) 并得到 42306。

为什么我的差是 2?

【问题讨论】:

    标签: sql-server excel date


    【解决方案1】:

    我认为有两个原因。

    Excel 中第一个带有序列号的日期是 1900-01-01。序列号为 1。https://support.office.com/en-gb/article/DATEVALUE-function-df8b07d4-7761-4a93-bc33-b7471bbff252 在 SQL 中,此日期的数字是 0 而不是 1。因此,差异为 1。

    第二个单元有点奇怪。在 Excel 中,日期 1900-02-29 有一个序列号,即使该日期不存在(2 月 29 日每 4 年存在一次,世纪之交除外)。在 SQL 1900-02-29 中不存在(尝试这样做SELECT CONVERT(int, CONVERT(datetime, '19000229')))。所以这说明了第二个单位差异。

    【讨论】:

      【解决方案2】:

      实际上sql和excel的日期差等于1。正因如此,在excel中01/01/1900等于1,相反,在sql中01/01/1900等于0。阅读本文article

      【讨论】:

        【解决方案3】:

        答案就在这里。 https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year

        除了日期 1900-01-01 的初始索引发生变化外,由于 Excel 历来将 1900 年视为闰年,因此也发生了变化。即,Excel 中有 29/02/1900。 SQL 中没有这样的日期。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多