如果我在WHERE子句中使用DateTime来过滤DateTimeOffset字段的行,会发生什么?

时间:2014-10-02 08:28:31

标签: sql tsql datetime datetimeoffset

如果我在WHERE子句中使用DateTime来过滤DateTimeOffset字段的行,会发生什么?

SQL Server是否将DateTime字段转换为DateTimeOffset,偏移量为ZERO或......?

例如:

DECLARE @myTime As DateTime = GetDAte()

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

1 个答案:

答案 0 :(得分:1)

DATETIMEDATETIME2DATETIMEOFFSET值进行比较时,会发生隐式转化。

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