gpt4 book ai didi

sql-server - 带有 DateTimeoffset 的 DateAdd 有时会删除偏移量

转载 作者:行者123 更新时间:2023-12-01 13:43:23 27 4
gpt4 key购买 nike

在尝试从 DateTimeOffsetValue 中删除时间时,我遇到了时区被删除的情况 - 我猜这里发生了到 DateTime 的隐式转换,但为什么呢?

DECLARE @d DATETIMEOFFSET = '2013-11-22 00:00:00.000 -07:00';

select
[Original DateTimeOffset] = @d,
[Add 1 Month] = DATEADD(MONTH,1,@d),
[DateAdd and DateDiff] = DATEADD(dd, DATEDIFF(dd, 0, @d), 0);

以上查询导致 DateAdd 和 DateDiff 值作为 DateTime 出现。我原以为它会是 DateTimeOffset,因为输入日期是 DateTimeOffset。

原始日期时间偏移: 2013-11-22 00:00:00.0000000 -07:00
添加 1 个月: 2013-12-22 00:00:00.0000000 -07:00
DateAdd 和 DateDiff: 2013-11-22 00:00:00.000

为什么会这样?

最佳答案

因为 int 不可转换为 datetimeoffset。归结为:

[DateAdd and DateDiff] = 0 + 41598 days

你如何解释 0?它不能直接转换为 datetimeoffset:

SELECT CAST(0 as datetimeoffset) -- Error
SELECT CAST(CAST(0 as datetime) as datetimeoffset) -- OK

因此 SQL Server 将其隐式转换为 datetime(即 1990-01-01 00:00:00)

关于sql-server - 带有 DateTimeoffset 的 DateAdd 有时会删除偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37887818/

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