2014-10-02 20 views
0

如果我在我的WHERE子句中使用DateTime來根據DateTimeOffset字段篩選行,會發生什麼情況?如果我在WHERE子句中使用DateTime來根據DateTimeOffset字段篩選行,會發生什麼情況?

SQL服務器是否將DateTime字段轉換爲DateTimeOffset,偏移量爲零或...?

例如:

DECLARE @myTime As DateTime = GetDAte() 

SELECT * 
FROM foo 
WHERE @myTime > dbo.foo.TimeStampOffset -- TimeStampOffset is a DateTimeOffset field in foo table 
+0

檢查['SQL日期時間/ DATETIMEOFFSET(2)比較和隱式轉換wierdness'(HTTP://dba.stackexchange。關於[數據庫管理員](http://dba.stackexchange.com)上的問題/數據庫問題/ 71150/sql-datetime-datetimeoffset2-comparison-implicit-cast-wierdness) – Pred 2014-10-02 08:36:14

回答

1

當比較DATETIMEDATETIME2DATETIMEOFFSET值,一個隱式轉換occures。

DATETIMEOFFSET - > DATETIME2

datetime被複制到DATETIME2值,並且time zone被截斷。當DATETIME2(n)值的精度大於DATETIMEOFFSET (n)值的精度時,小數秒將被截斷以適合。 (http://msdn.microsoft.com/en-us/library/bb630289.aspx

DATETIMEOFFSET - > DATETIME

的日期和時間值被複制,以及時區被截斷。當datetimeoffset(n)值的分數精度大於三位數時,該值將被截斷。 (http://msdn.microsoft.com/en-us/library/bb630289.aspx

DATETIMEOFFSET - > DATETIME或DATETIME2

DATETIMEDATETIME2值轉換爲DATETIMEOFFSET,原始值被視爲UTC值和偏移將是+00:00。 (DATETIMEDATETIME2類型不存儲時區的偏移量)。

會發生什麼情況?

如果您的服務器的時區不是+00:00,那麼比較可能會導致誤報和否定 - >結果將不是所需的。

如果要比較當前的時間,改變@myTime的聲明DECLARE @myTime As DateTimeOffset = SysDateTimeOffset()

相關問題