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

时间:2018-07-27 11:49:33

标签: sql-server excel

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

进行转换时
select convert(datetime,convert(int, 43251))

其显示02-06-2018。为什么与Microsoft的转换差异如此?

1 个答案:

答案 0 :(得分:6)

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的leap年算法不正确。因此,将第60天视为1900-02-29。但是,1900年不是a年,因此“ 60”应为1900-03-01。

leap年的规则是:

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

因此,2000年是a年,但1900年和2100年不是a年。

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