Sql server SQL Server 2012中的日期转换问题

Sql server SQL Server 2012中的日期转换问题,sql-server,date,datetime,sql-server-2012,Sql Server,Date,Datetime,Sql Server 2012,我正在尝试将数值转换为日期。我在下面找到了答案 SELECT CONVERT(DATETIME, CONVERT(FLOAT, 41547)) 我得到的输出是2013-10-02 00:00:00.000 但是如果我在excel中检查日期值41547,它会给我2013-09-30,这比我在SQL Server中得到的时间少2天 请帮助我理解此转换。 我如何获得2013-09-30而不是2013-10-02的数字41547 Excel将虚构的日期1900年1月00日(即1899年12月31日)视

我正在尝试将数值转换为日期。我在下面找到了答案

SELECT CONVERT(DATETIME, CONVERT(FLOAT, 41547))
我得到的输出是2013-10-02 00:00:00.000

但是如果我在excel中检查日期值41547,它会给我2013-09-30,这比我在SQL Server中得到的时间少2天

请帮助我理解此转换。
我如何获得2013-09-30而不是2013-10-02的数字41547

Excel将虚构的日期1900年1月00日(即1899年12月31日)视为对应于0,并错误地将1900年视为闰年。因此,对于1900年1月3日之前的日期,Excel数字实际上是1899年12月31日之后的天数

Excel不会格式化0以下的任何数字(-1给出的数字为0),因此这只对“01/00/1900”到02/28/1900很重要,因此更容易将1899年12月30日作为基准

参考此

因此,在SQL Server中,您需要添加12/30/1899中的天数(本例中为41547天),如下所示,它将给出与excel返回相同的结果

SELECT DATEADD(DAY, 41547, '1899-12-30')  
结果将是2013-09-30 00:00:00.000

如果您不希望在结果中使用时间戳,并且希望excel中的格式与2013-09-30中的格式相同,请使用转换为

SELECT REPLACE(CONVERT(VARCHAR(10), DATEADD(DAY ,41547, '1899-12-30'), 111), '/', '-')

这可能是因为您将值强制转换为一个近似的数据类型
浮点值。如果您将其转换为一个
整数
,您会得到什么?我忘了修改,我使用float和int都会得到相同的结果。您是对的,我也会得到相同的结果,同样适用于excel。我不知道excel是如何进行转换的,但我更信任sql server…还有一个疑问是,这种转换问题只存在于sql server中,还是存在于其他数据库中,如oracle、mysql…?@dreamer请参考此了解