Mam pole SQL datetime
w bardzo dużej tabeli. Jest indeksowany i musi zostać zapytany.Jaki jest optymalny sposób porównywania dat w serwerze Microsoft SQL?
Problem polega na tym, że SQL zawsze przechowuje komponent czasu (nawet jeśli jest zawsze o północy), ale wyszukiwania dotyczą raczej dnia niż czasu.
declare @dateVar datetime = '2013-03-11;
select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
Nic nie zwróci, ponieważ t.[DateColumn]
zawsze zawiera komponent czasu.
Moje pytanie brzmi: jak najlepiej to obejść?
Wydaje się, że dwie główne grupy opcji:
utworzyć drugą zmienną korzystając
dateadd
i używająbetween ... and
lub>= ... and ... <=
.Konwersja
t.[DateColumn]
na komponent tylko daty - Myślę, że spowoduje to zignorowanie indeksów.
Oba wydają się bardzo niechlujne - nie chcę porównywać zakresów ani skanować stołu.
Czy istnieje lepszy sposób?
Jeśli jedna z tych opcji jest konsekwentnie optymalna, to w jaki sposób i dlaczego?
@Keith Dzięki za podanie przykładów .. i dobre pytanie;) –