我正在尝试将数值转换为日期。我在下面找到答案
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 。
答案 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), '/', '-')