像t-sql中的excel格式单元格一样,在datetime中转换sting

像t-sql中的excel格式单元格一样,在datetime中转换sting,excel,tsql,date,Excel,Tsql,Date,我有像43830.99931这样的结束日期数据。当我将其粘贴到excel中并将单元格设置为最新格式时。将其转换为2019年12月31日晚上11:59:00。我想要T-SQL中的相同功能。如何使用T-SQL实现相同的结果?Excel(默认情况下)使用1900日期系统。这仅仅意味着日期1900年1月1日的真实数值为1,1900年1月2日的数值为2等。这些值在Excel中称为“序列值”,正是这些序列值允许我们在计算中使用日期 要转换的代码: DECLARE @SerialDate FLOAT; SET

我有像43830.99931这样的结束日期数据。当我将其粘贴到excel中并将单元格设置为最新格式时。将其转换为2019年12月31日晚上11:59:00。我想要T-SQL中的相同功能。如何使用T-SQL实现相同的结果?

Excel(默认情况下)使用1900日期系统。这仅仅意味着日期1900年1月1日的真实数值为1,1900年1月2日的数值为2等。这些值在Excel中称为“序列值”,正是这些序列值允许我们在计算中使用日期

要转换的代码:

DECLARE @SerialDate FLOAT;
SET @SerialDate = 43830.99931;
SELECT CAST(@SerialDate - 2 AS DATETIME);
返回以下项的日期时间值:

2019-12-31 23:59:00.383
您可能已经注意到演员阵容中的
-2
。这是因为Excel,由于1900年2月29日的问题以及开始/结束日期的包容性。(1900-01-01是第一天而不是第0天,1900不是闰年,但excel计算错误)我们必须减去2。有关该问题的详细信息可以找到