【发布时间】:2016-04-29 12:34:32
【问题描述】:
我有一个带有作为主键的 datetimeoffset 字段的表。我想用日期时间过滤我的表。
例如我的桌子有:
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 是主键?
有没有更好的办法?
非常感谢...
【问题讨论】:
-
标记使用的 dbms。 (该代码看起来不像 ANSI SQL...)
-
谢谢。这是 MS SQL 服务器 2014。
标签: sql datetime sql-server-2014 datetimeoffset