SQL与Excel中的整数到日期转换问题

pad*_*adh 1 sql-server excel

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

select convert(datetime,convert(int, 43251))
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 6

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

我相信正确的转换是:

select dateadd(day, 43251, '1899-12-30')
Run Code Online (Sandbox Code Playgroud)

这令人困惑.Excel将01900-00-00,这意味着0是1899年12月31日,1是1900-01-01.这应该表明转换是:

select dateadd(day, 43251, '1899-12-31')
Run Code Online (Sandbox Code Playgroud)

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

闰年的规则是:

  • 可被4整除的年份
  • 除了可以被100整除的年份
  • 除了可以被400整除的年份

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

换句话说,日期仅适用于1900-03-01之后的日期.