我有一个整数的日期值为43251,而在MS Excel中转换显示31-05-2018.使用下面的sql进行转换时
select convert(datetime,convert(int, 43251))
Run Code Online (Sandbox Code Playgroud)
它显示02-06-2018.为什么微软转换的这种差异?
SQL Server使用不同的日期格式.
我相信正确的转换是:
select dateadd(day, 43251, '1899-12-30')
Run Code Online (Sandbox Code Playgroud)
这令人困惑.Excel将0如1900-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.
闰年的规则是:
所以,2000年是闰年,但1900年和2100年不是.
换句话说,日期仅适用于1900-03-01之后的日期.