Каков оптимальный способ сравнения дат на сервере Microsoft SQL?
У меня есть SQLdatetime
поле в очень большой таблице. Он проиндексирован и нуждается в запросе.
Проблема заключается в том, что 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]
в компонент только для даты - я думаю, что это приведет к игнорированию любых индексов.
Оба они кажутся очень грязными - я действительно не хочу сравнивать диапазон или сканировать таблицу.
Есть ли способ лучше?
Если один из этих вариантов является последовательно оптимальным способом, то как и почему?