2010-10-21 101 views
1

我想知道是否有人能夠幫助我理解爲什麼這兩個條件不會返回相同的結果集。對我來說,似乎奇怪的是SQL Server 2008 R2在約束數據時不知道使用偏移量。有一個更好的方法嗎?據我所知,標準二是獲得正確數據的唯一方法。使用DateTimeOffset作爲SQL Server 2008查詢中的WHERE條件

-- 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

爲什麼它會返回相同的?在標準1中,您將比較原始時間和偏移量,在標準2中您將更改兩者的偏移量。

+0

但是,爲什麼我應該有切換偏移?它已經有一個與它相關的偏移量,所以在我看來,我只需要設置我傳遞它的標準的偏移量,剩下的就應該完成。在我看來,像SQL Server應該在執行查詢之前將所有內容切換到0偏移量。爲什麼我需要使用switchoffset將偏移量放入與其他偏移量相同的時區中。似乎多餘和不必要的。 – 2010-10-21 23:19:09

0

TODATETIMEOFFSET將值(s)轉換爲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 
+0

是的,我知道這些之間的區別。我正在嘗試獲取在太平洋標準時間1日內發生的所有記錄,這就是爲什麼我今天和明天在PST中將它作爲標準提供給您的原因。問題是,不應該SQL Server知道它比較的兩個值是DateTimeOffset的,並將它們轉換爲UTC(0偏移量)或其自身的性質?如果時區信息與兩部分數據相關,爲什麼我必須確保它們處於同一時區? – 2010-10-21 23:22:16

+0

我同意 - 我不明白什麼使用這種數據類型。當然不能解決我使用「datetime2」類型時遇到的任何問題,關於處理多個時區的問題。基於此,我建議您將一個單獨的副本存儲爲不帶偏移量的datetime2,然後進行查詢。 (呸)。 – 2011-11-21 13:30:46