Каков оптимальный способ сравнения дат на сервере 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] в компонент только для даты - я думаю, что это приведет к игнорированию любых индексов.

Оба они кажутся очень грязными - я действительно не хочу сравнивать диапазон или сканировать таблицу.

Есть ли способ лучше?

Если один из этих вариантов является последовательно оптимальным способом, то как и почему?

Ответы на вопрос(4)

Ваш ответ на вопрос