【发布时间】:2013-02-26 23:42:59
【问题描述】:
我在一个非常大的表中有一个 SQL datetime 字段。已编入索引,需要查询。
问题在于 SQL 总是存储时间组件(即使它总是午夜),但搜索的是当天,而不是时间。
declare @dateVar datetime = '2013-03-11;
select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
不会返回任何内容,因为 t.[DateColumn] 始终包含时间组件。
我的问题是最好的解决方法是什么?
似乎有两组主要的选项:
使用
dateadd创建第二个变量并使用between ... and或>= ... and ... <=。将
t.[DateColumn]转换为仅限日期的组件 - 我认为这会导致所有索引都被忽略。
这两个看起来都非常混乱 - 我真的不想进行范围比较或扫描表格。
有没有更好的办法?
如果这些选项之一始终是最佳方式,那么如何以及为什么?
【问题讨论】:
标签: sql sql-server tsql datetime query-optimization