web-dev-qa-db-fra.com

SQL Server: comparer le jour datetime avec GETDATE ()

J'ai une procédure stockée qui devrait récupérer tous les enregistrements avec une date égale à la date actuelle ou à l'avenir. Les dates sont enregistrées dans la colonne targetDate et formatées en datetime. Ma clause WHERE correspondante est la suivante:

WHERE A.targetDate >= GETDATE()

En général, ma procédure stockée fonctionne bien, mon seul problème est si la date cible est égale à la date actuelle car toutes les dates sont enregistrées comme suit, c'est-à-dire avec l'heure définie sur des zéros:

2014-02-22 00:00:00.000

Comment dois-je modifier ma clause WHERE pour qu'elle ne prenne en compte que la date mais ignore le temps enregistré avec elle afin que j'obtienne des enregistrements avec la date actuelle même si l'heure est déjà passée?

Merci beaucoup pour toute aide à ce sujet, Tim.

10
user2571510

Changer pour:

WHERE A.targetDate >= cast(GETDATE() as date)

Modifier - car la date cible contient également l'heure, oui, formatez les deux comme ceci:

WHERE cast(A.targetDate as date) >= cast(GETDATE() as date)

Modifier - compte tenu des commentaires concernant les performances, vous pouvez essayer:

WHERE a.targetdate >= cast(cast(getdate() as date) as datetime)

La dernière modification devrait vous donner le même résultat et profiter de tous les index à la date cible

22
Brian DeMilia

Ce qui suit devrait vous donner la date actuelle sans heure:

SELECT DATEADD(dd,0,DATEDIFF(dd,0,GETDATE()))

Cela devrait être votre dernière ligne:

WHERE A.targetDate >= DATEADD(dd,0, ATEDIFF(dd,0,GETDATE()))
2
Preli