2015-08-04 1 views
1

Ce que j'essaie d'accomplir consiste à sélectionner tous les enregistrements d'une table créés le jour précédent - et l'enregistrement est stocké dans la table en tant que "smalldatetime". l'heure à laquelle l'enregistrement a été créé.DATEADD lors de l'utilisation de données de type SmallDateTime

CreatedDateTime

Si j'utilise la fonction DATEADD dans ma clause WHERE, je retournais pas de documents que je connais est incorrect.

Appt.CreatedDateTime = DATEADD(DAY, -1, GETDATE())

Comment puis-je dépouiller le timbre de temps pour trouver tous les documents qui ont été créés le jour précédent?

Merci,

Répondre

3

Vous avez quelques options ici. Vous pouvez lancer votre colonne en tant que DATE ou vous pouvez faire quelques calculs de date.

where Appt.CreatedDateTime >= dateadd(day, datediff(day, 0, getdate()) - 1, 0) --beginning of yesterday 
    and Appt.CreatedDateTime < dateadd(day, datediff(day, 0, getdate()), 0) --beginning of today 

OU

CAST(Appt.CreatedDateTime as DATE) = DATEADD(DAY, -1, GETDATE()) 
+1

Bien que les deux travaux, vous devriez préférer la première option si vous valorisez une bonne utilisation de l'index. –

+2

Le fait de convertir un datetime en une date est l'un de ces moments géniaux qui ne rend pas la requête nonSARGable. Je préfère l'option plus verbeuse car il est très clair qu'elle est SARGable. : D –

+1

intéressant ... merci pour le pourboire! http://stackoverflow.com/questions/24659476/castdatetime-as-date-over-where-clause –