A maneira mais razoável de fazer isso é remover a parte de hora dos valores de data e hora e comparar os resultados, e a melhor maneira de remover a parte de hora de um datetime é assim:
cast(current_timestamp as date)
Eu costumava usar e defender um processo que se parecia com uma das duas linhas a seguir:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Mas agora que o Sql Server tem a
Date
tipo, que não contém um componente de tempo, há poucas razões para usar qualquer uma dessas técnicas. Mais uma coisa a ter em mente é que isso ainda atrapalhará uma consulta se você precisar fazer isso para dois valores de data e hora para cada linha em uma cláusula where ou condição de junção. Se possível, você deseja fatorar isso de alguma forma para que seja pré-calculado o máximo possível, por exemplo, usando uma exibição ou coluna computada.
Finalmente, observe que a função DATEDIFF compara o número de limites cruzados. Isso significa que o datediff em dias entre
'2009-09-14 11:59:59'
e '2009-09-15 00:00:01'
é 1, embora apenas 2 segundos tenham se passado, mas o DATEDIFF em dias entre '2009-09-15 00:00:01'
e '2009-09-15 11:59:59'
ainda é zero, mesmo que tenham passado 86.398 segundos. Ele realmente não se importa com a parte do tempo, apenas com os limites. Dependendo do que sua consulta está tentando fazer, você pode usar isso a seu favor.