dre*_*mer 3 sql-server datetime date sql-server-2012
我正在尝试将数值转换为日期.我在下面的答案找到了它
SELECT CONVERT(DATETIME, CONVERT(FLOAT, 41547))
Run Code Online (Sandbox Code Playgroud)
我得到的输出是2013-10-02 00:00:00.000
但是如果我在excel中检查41547的日期值它给了我2013-09-30,这比我在SQL Server中得到的少了2天.
请帮我理解这种转换.
我如何获得2013-09-30而不是2013-10-02为41547.
Excel将神秘日期01/00/1900(即12/31/1899)视为对应于0,并错误地将1900年视为闰年.因此,对于03/01/1900之前的日期,Excel编号实际上是18/31/1899之后的天数.
Excel不会格式化任何低于0的数字(-1给你##########),所以这只对"01/00/1900"到02/28/1900很重要,因此更容易使用以12/30/1899日期为基础.
参考这篇 文章
因此,在您的SQL Server中,您需要添加12/30/1899中的天数(在您的情况下为41547 ),如下所示,它将提供与excel返回相同的结果.
SELECT DATEADD(DAY, 41547, '1899-12-30')
Run Code Online (Sandbox Code Playgroud)
这将导致2013-09-30 00:00:00.000
如果您不希望结果中的时间戳与excel 2013-09-30中的格式相同,那么请使用convert as
SELECT REPLACE(CONVERT(VARCHAR(10), DATEADD(DAY ,41547, '1899-12-30'), 111), '/', '-')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |