Qual é a melhor maneira de comparar datas no Microsoft SQL Server?
Eu tenho um SQLdatetime
campo em uma tabela muito grande. É indexado e precisa ser consultado.
O problema é que o SQL sempre armazena o componente de tempo (embora seja sempre meia noite), mas as buscas são para o dia, em vez de hora.
declare @dateVar datetime = '2013-03-11;
select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
Não vai devolver nada, como ot.[DateColumn]
sempre inclui um componente de tempo.
Minha pergunta é qual é o melhor caminho para isso?
Parece haver dois grupos principais de opções:
Crie uma segunda variável usandodateadd
e usar umbetween ... and
ou>= ... and ... <=
.
Converta ot.[DateColumn]
em um componente apenas de data - acho que isso fará com que todos os índices sejam ignorados.
Ambos parecem muito confusos - eu realmente não quero fazer uma comparação de intervalo ou escanear a tabela.
Existe uma maneira melhor?
Se uma dessas opções é consistentemente ótima, então como e por quê?