为了从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。
Original 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
为什么会这样?
答案 0 :(得分:3)
因为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
)