gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:21:28 25 4
gpt4 key购买 nike

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

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 treats the mythical date 01/00/1900 (i.e., 12/31/1899) as corresponding to 0, and incorrectly treats year 1900 as a leap year. So for dates before 03/01/1900, the Excel number is effectively the number of days after 12/31/1899.

Excel will not format any number below 0 (-1 gives you ##########) and so this only matters for "01/00/1900" to 02/28/1900, making it easier to just use the 12/30/1899 date as a base.

引用自此 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), '/', '-')

关于sql-server - SQL Server 2012 中的日期转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com