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ê?

questionAnswers(4)

yourAnswerToTheQuestion