簡體   English   中英

在SQL Server 2008查詢中使用DateTimeOffset作為WHERE條件

[英]Using DateTimeOffset as WHERE criteria in a SQL Server 2008 query

我想知道是否有人可以幫助我理解為什么這兩個條件不能返回相同的結果集。 對我來說,SQL Server 2008 R2在約束數據時不知道使用偏移量似乎很奇怪。 有一個更好的方法嗎? 據我所知,准則二是獲取正確數據的唯一方法。

-- Criteria One
OriginationDateTimeOffset >= TODATETIMEOFFSET('2010-10-20', '-08:00') AND
OriginationDateTimeOffset < TODATETIMEOFFSET('2010-10-21', '-08:00')

-- Criteria Two
SWITCHOFFSET(OriginationDateTimeOffset, '-08:00') >= TODATETIMEOFFSET('2010-10-20', '-08:00') AND
SWITCHOFFSET(OriginationDateTimeOffset, '-08:00') < TODATETIMEOFFSET('2010-10-21', '-08:00')

為什么會返回相同的值? 在條件1中,您將原始時間與偏移量進行比較,而在條件2中,您將兩者均更改為偏移量。

TODATETIMEOFFSET將值轉換為datetimeoffset。 SWITCHOFFSET將值更改為另一個datetimeoffset。 例如:

DECLARE @OriginationDateTimeOffset DATETIMEOFFSET = '2010-10-20'

SELECT @OriginationDateTimeOffset, 
    SWITCHOFFSET(@OriginationDateTimeOffset, '-08:00'),
    TODATETIMEOFFSET(@OriginationDateTimeOffset, '-08:00')

產生:

2010-10-20 00:00:00.0000000 +00:00
2010-10-19 16:00:00.0000000 -08:00
2010-10-20 00:00:00.0000000 -08:00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM