La meilleure façon de bande de la partie heure à partir d'un datetime est comme ceci:
cast(current_timestamp as date)
J'ai l'habitude d'utiliser et de défendre 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 l' Date
type, qui n'est pas titulaire d'un composant, il y a peu de raisons d'utiliser l'une de ces techniques.
Une chose à garder à l'esprit ici est que c'est toujours d'aller occuper une requête si vous avez besoin de le faire pour les deux valeurs datetime pour chaque ligne dans une clause where ou condition de jointure. Si possible, vous voulez facteur de cela d'une certaine façon alors qu'il est pré-calculé, autant que possible, par exemple à l'aide d'une vue ou une colonne calculée.
Enfin, notez que la fonction DATEDIFF compare le nombre de frontières franchies. Ainsi, le datediff en jours entre '2009-09-14 11:59:59'
et '2009-09-15 00:00:01'
est de 1, même si seulement 2 secondes s'est écoulé, mais le DATEDIFF en jours entre '2009-09-15 00:00:01'
et '2009-09-15 11:59:59'
est toujours égale à zéro, même si 86,398 secondes écoulées. Notez qu'il ne s'occupe pas vraiment du tout sur la partie heure là. Selon ce que votre requête est en train de faire, vous pourriez être en mesure de l'utiliser à votre avantage.