Ho un campo SQL datetime
in una tabella molto grande. È indicizzato e deve essere interrogato.Qual è il modo ottimale per confrontare le date nel server Microsoft SQL?
Il problema è che SQL memorizza sempre il componente orario (anche se è sempre mezzanotte), ma le ricerche sono relative al giorno anziché al tempo.
declare @dateVar datetime = '2013-03-11;
select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
non tornerà nulla, come il t.[DateColumn]
include sempre una componente di tempo.
La mia domanda è qual è il modo migliore intorno a questo?
Sembra che ci siano due gruppi principali di opzioni:
Creare una seconda variabile utilizzando
dateadd
e utilizzare unbetween ... and
o>= ... and ... <=
.Convertire il
t.[DateColumn]
in un componente solo per la data. Penso che questo causerà l'ignoranza di qualsiasi indice.
Entrambe sembrano molto disordinate: non voglio davvero fare un confronto tra intervalli o scansionare il tavolo.
C'è un modo migliore?
Se una di queste opzioni è sempre in modo ottimale, come e perché?
@Keith Grazie per aver specificato esempi .. e buona domanda;) –