【发布时间】:2018-09-02 06:39:23
【问题描述】:
我们想计算两个DateTimeOffsets之间的差,但是,SQL返回错误的值,我们做错了什么?
DECLARE @timeInZone1 AS DATETIMEOFFSET
DECLARE @timeInZone2 AS DATETIMEOFFSET
SET @timeInZone1 = '2012-01-13 00:00:00 +1:00';
SET @timeInZone2 = '2012-01-13 23:00:00 +1:00';
SELECT DATEDIFF( day, @timeInZone1, @timeInZone2 );
差值应该是 0 但它返回 1
【问题讨论】:
-
Per the docs:“在计算返回值时不使用 startdate 或 enddate 的时区偏移分量。”我认为这是“我们实际上是根据转换后的 UTC 时间计算的”(其中
2012-01-13 00:00:00 +1:00实际上是2012-01-12的一部分)而不是“我们忽略时区,因此当您使用同一时间时答案至少是正确的”区域一致”。考虑计算hour的差值并除以 24;即使没有时区,这通常也是您想要的。 -
可能是当您使用时间 '00:00:00' 时,它仅被解释为日期,然后根据文档,时区设置为 '0:00',因此1 天的差异。
-
请注意,将
datetimeoffset值转换为datetime会返回 0:select datediff( day, convert(datetime, @timeInZone1), convert(datetime, @timeInZone2));
标签: sql sql-server tsql datetime datetimeoffset