首页 > 解决方案 > SQL与Excel中的整数到日期转换问题

问题描述

我有整数日期值 43251,而在 MS Excel 中转换它显示 31-05-2018。在使用下面的 sql 进行转换时

select convert(datetime,convert(int, 43251))

它显示 02-06-2018。为什么与微软的转换有这种差异?

标签: sql-serverexcel

解决方案


SQL Server 使用不同的日期格式。

我相信正确的转换是:

select dateadd(day, 43251, '1899-12-30')

这令人困惑。Excel 将0其视为1900-00-00,这意味着 0 是 1899-12-31,1 是 1900-01-01。这应该表明转换是:

select dateadd(day, 43251, '1899-12-31')

但是,这不会产生正确的日期。为什么不?Excel 的闰年算术不正确。因此,它将第 60 天视为 1900-02-29。但是,1900 不是闰年,所以“60”应该是 1900-03-01。

闰年的规则是:

  • 能被4整除的年份
  • 能被 100 整除的年份除外
  • 除了能被 400 整除的年份

所以,2000 年是闰年,但 1900 年和 2100 年不是。

换句话说,日期仅对 1900-03-01 之后的日期是正确的。


推荐阅读