Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comparez les dates dans T-SQL, en ignorant la partie heure

La façon la plus raisonnable de le faire est de supprimer la partie heure des valeurs datetime et de comparer les résultats, et la meilleure façon de supprimer la partie heure d'un datetime est la suivante :

cast(current_timestamp as date)    

J'avais l'habitude d'utiliser et de préconiser un processus qui ressemblait à l'une des deux lignes suivantes :

cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))

Mais maintenant que SQL Server a la Date type, qui ne contient pas de composante temporelle, il y a peu de raisons d'utiliser l'une ou l'autre de ces techniques.

Une autre chose à garder à l'esprit est que cela enlisera toujours une requête si vous devez le faire pour deux valeurs datetime pour chaque ligne dans une clause where ou une condition de jointure. Si possible, vous voulez factoriser cela d'une manière ou d'une autre afin qu'il soit pré-calculé autant que possible, par exemple en utilisant une vue ou une colonne calculée.

Enfin, notez que la fonction DATEDIFF compare le nombre de frontières franchies. Cela signifie que la différence de date en jours entre '2009-09-14 11:59:59' et '2009-09-15 00:00:01' est 1, même si seulement 2 secondes se sont écoulées, mais le DATEDIFF en jours entre '2009-09-15 00:00:01' et '2009-09-15 11:59:59' est toujours à zéro, même si 86 398 secondes se sont écoulées. Il ne se soucie pas vraiment du tout de la portion de temps là-bas, seulement des limites. En fonction de ce que votre requête essaie de faire, vous pourrez peut-être l'utiliser à votre avantage.