SQL Server 2012中的日期转换问题

时间:2016-05-25 11:39:04

标签: 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

1 个答案:

答案 0 :(得分:6)

  

Excel将神秘日期01/00/1900(即12/31/1899)视为对应于0,并错误地将1900年视为闰年。因此,对于03/01/1900之前的日期,Excel编号实际上是18/31/1899之后的天数。

     

Excel不会格式化低于0的任何数字(-1给出##########),因此这仅对" 01/00/1900"到19/28/1900,使用12/30/1899日期作为基础更容易。

post

的参考资料

因此,在您的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), '/', '-')