我的日期值整数为43251,而在MS Excel中转换时显示为31-05-2018。使用下面的sql
进行转换时select convert(datetime,convert(int, 43251))
其显示02-06-2018。为什么与Microsoft的转换差异如此?
答案 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年的规则是:
因此,2000年是a年,但1900年和2100年不是a年。
换句话说,日期仅对1900-03-01之后的日期正确。