2010-09-16 5 views
0

J'utilise SQL Server 2008 Enterprise. J'ai une table appelée Foo et elle a une colonne de type DateTime appelée MyTime. Je veux trouver tous les enregistrements (lignes) dont la valeur de la colonne MyTime a été écoulée depuis plus de 3 jours (écoulé à partir de l'heure actuelle). Comment mettre en œuvre cela?Problème de type DateTime SQL

merci à l'avance, George

Répondre

3
WHERE myTime < DATEADD(dd,-3,getDate()) 
+0

Merci, question répondue! – George2

1

datediff (d, GetDate(), MyTime)> 3

select * from table 
    where datediff(d,GetDate(),MyTime) > 3 

Edit: Il était l'inverse: P

+3

Cette vous donnera la bonne réponse, mais il n'utilisera pas les index correctement. –

1

Vous pouvez utiliser DATEADD (date pièce, numéro, date) pour faire le calcul:

SELECT * FROM Foo WHERE MyTime > DATEADD(dd, -3, MyTime) 
3

Si vous avez beaucoup de lignes que vous auriez probablement à supprimer par ligne-expressions, donc d'abord savoir à quelle date est-ce que vous cherchez, et puis juste comparer:

DECLARE @DateExpired DATETIME 
SET @DateExpired = GETDATE() - 3 
SELECT * 
FROM Foo 
WHERE MyTime < @DateExpired 
+1

Je ne pense pas que vous ayez besoin de casser le 'GETDATE() - 3' dans une autre déclaration. Il ne devrait être exécuté qu'une seule fois, même si vous le mettez dans le corps de la requête, car le planificateur sera assez intelligent pour réaliser que c'est une valeur constante. C'est toujours la meilleure réponse. –

+0

Oui, d'accord ... c'est juste un habbit pour garder les requêtes propres ... – veljkoz

1
create table #foo 
(
MyTime dateTime 
) 

Insert Into #foo 
Values ('2010-09-15') 
Insert Into #foo 
Values ('2010-09-14') 
Insert Into #foo 
Values ('2010-09-13') 
Insert Into #foo 
Values ('2010-09-12') 


Select * FRom #foo 
Where DateAdd(day, 3, MyTime) <= '2010-09-16' 

drop table #foo