Sql 按datetime选择datetimeoffset字段

Sql 按datetime选择datetimeoffset字段,sql,datetime,sql-server-2014,datetimeoffset,Sql,Datetime,Sql Server 2014,Datetimeoffset,我有一个带有datetimeoffset字段的表,该字段是主键。我想用datetime筛选我的表 例如,我的表格有: 2016-04-27 23:30:00.7684500 +03:00 2016-04-28 00:30:00.7684500 +03:00 在当地时间格式中,第一行表示2016-04-28 02:30:00,第二行表示2016-04-28 03:30:00。我指的是其中两个日期:2016-04-28 当我想在2016年4月28日报告交易时,我只得到第二行 declare @fr

我有一个带有datetimeoffset字段的表,该字段是主键。我想用datetime筛选我的表

例如,我的表格有:

2016-04-27 23:30:00.7684500 +03:00
2016-04-28 00:30:00.7684500 +03:00
在当地时间格式中,第一行表示2016-04-28 02:30:00,第二行表示2016-04-28 03:30:00。我指的是其中两个日期:2016-04-28

当我想在2016年4月28日报告交易时,我只得到第二行

declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where dto > @fromDate
因为,sql在datetimeoffset字段中查看UTC时间

我可以像这样得到我真正想要的:

declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where CAST(dto as datetime) > @fromDate
第一排和第二排来了

问题是:演员的表现会受到影响吗?系统查看并强制转换每一行(顺序读取),即使dto是主键

还有更好的办法吗


非常感谢……

当然。。。我建议在表中添加一个计算字段。这样,转换在SQL中自动进行,查询中不需要强制转换或转换。搜索计算字段并插入代码

CONVERT(DATETIME, dto, 109)

我将使用TRY_CONVERT,因为您可以专门为新计算字段设置日期时间的格式,如果由于某种原因,dto不是有效日期,它将插入NULL,而不是失败。

如果偏移量(+3)是常量,您可以尝试以下操作:

declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where dateadd(hour, 3, dto) > @fromDate
或者您可以使用
TODATETIMEOFFSET

详情如下:

select * from MYTABLE where TODATETIMEOFFSET(dto, '03:00') > @fromDate 

标记所使用的dbms。(该代码看起来不像ANSI SQL…)谢谢。这是MS SQL server 2014。
select * from MYTABLE where TODATETIMEOFFSET(dto, '03:00') > @fromDate