Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Comparar datas no T-SQL, ignorando a parte do tempo


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.