Sql 如果我在WHERE子句中使用DateTime根据DATETIMEOFSET字段筛选行,会发生什么情况?

Sql 如果我在WHERE子句中使用DateTime根据DATETIMEOFSET字段筛选行,会发生什么情况?,sql,tsql,datetime,datetimeoffset,Sql,Tsql,Datetime,Datetimeoffset,如果我在WHERE子句中使用DateTime根据DATETIMETOFFSET字段筛选行,会发生什么情况 SQL server是否将DateTime字段转换为偏移量为零的DateTimeOffset或 例如: DECLARE @myTime As DateTime = GetDAte() SELECT * FROM foo WHERE @myTime > dbo.foo.TimeStampOffset -- TimeStampOffset is a DateTimeOffset fie

如果我在WHERE子句中使用DateTime根据DATETIMETOFFSET字段筛选行,会发生什么情况

SQL server是否将DateTime字段转换为偏移量为零的DateTimeOffset或

例如:

DECLARE @myTime As DateTime = GetDAte()

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

DATETIME
DATETIME2
DATETIMEOFFSET
值进行比较时,会发生隐式转换

DATETIMEOFFSET->DATETIME2

日期
时间
复制到
日期时间2
值,并截断
时区
。当
DATETIME2(n)
值的精度大于
DATETIMEOFFSET(n)
值的精度时,将截断小数秒以进行拟合。()

DATETIMEOFFSET->DATETIME

复制日期和时间值,并截断时区。当datetimeoffset(n)值的小数精度大于三位数时,该值将被截断。()

DATETIMEOFFSET->DATETIME或DATETIME2

DATETIME
DATETIME2
值转换为
DATETIMEOFFSET
时,原始值被视为
UTC
值,偏移量将为
+00:00
。(日期时间和日期时间2类型不存储时区的偏移量)

发生了什么事?

如果服务器的时区不是+00:00,则比较可能会导致误报和否定->结果将不是所需的结果

如果要与当前时间进行比较,请将
@myTime
的声明更改为
将@myTime声明为DateTimeOffset=SysDateTimeOffset()

检查问题