J'ai une table dans SQL Server 2005 qui a trois colonnes:Comment table de requête SQL Server basé sur une date précise
id (int),
message (text),
timestamp (datetime)
Il y a un index sur l'horodatage et id.
Je suis intéressé à faire une requête qui récupère tous les messages pour une date donnée, disons '12/20/2008 '. Cependant, je sais que faire simplement où timestamp = '12/20/2008 'ne me donnera pas le bon résultat parce que le champ est un champ datetime.
Quelqu'un a recommandé d'utiliser la fonction DATEPART et d'extraire l'année, le mois et le jour de l'horodatage et de vérifier qu'ils sont égaux à 2008, 12 et 20, respectivement. Il semble que cela n'utiliserait pas l'index que j'ai sur l'horodatage et finirait par faire un scan complet de la table.
Alors, quelle est la meilleure façon de construire ma requête afin que je profite de l'index que j'ai créé?
Le serveur SQL ne serait-il pas assez intelligent pour comprendre qu'il n'a besoin que de calculer @MyDate + 1 une fois pour l'instruction? – erikkallen
Probablement. Je sais pertinemment qu'il ne le fera pas pour getdate(), cependant. Bien sûr, c'est un appel de fonction, ce qui est un peu différent. Mais je suis paranoïaque à propos de tout ce dont je n'ai pas besoin dans une clause where. –
cela ne fonctionnera pas si @MyDate a une partie temporelle. Pour corriger cette utilisation: Où [horodatage]> = DateAdd (jour, DateDiff (jour, 0, @Date), 0) Et [horodatage]