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