Sélectionnez Enregistrements pour lesquels le champ de date est passé une année

J'ai une table avec des colonnes

TypeExame, DateExame 

Comment puis-je sélectionner tous les loggings avec (Now-DateExame)> = 365 jours?

 select * from MyTable where datediff (day, DateExame, getdate()) >= 365 

Voir DATEDIFF et GETDATE pour plus de détails.

Si vous avez un index sur DateExame , mettre la condition comme ceci permettra son utilisation:

 SELECT * FROM atable WHERE DateExame <= DATEADD(DAY, -365, CAST(GETDATE() AS date)) ; 

Ce qui précède reference le type de données de date , ce qui signifie que vous devez au less utiliser SQL Server 2008 pour l'exécuter. Pour le faire fonctionner dans les versions antérieures, vous pouvez réécrire la condition comme ceci:

 WHERE DateExame <= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 365, 0) 

Fondamentalement, la version modifiée utilise la méthode DATEADD / DATEDIFF pour tronquer une valeur datetime avec un réglage mineur pour soustraire 365 jours en cours de route.

Cependant, si toutes vos valeurs DateExame sont des dates sans la partie time, cette version plus simple devrait fonctionner aussi bien:

 WHERE DateExame <= DATEADD(DAY, -365, GETDATE()) 

Autrement dit, la suppression de la partie time du résultat de GETDATE() serait parfaitement inutile.

Essaye celui-là :

 select * from MyTable where datediff (day, DateExame, getdate()) >= 365 

En utilisant la fonction Datediff vous pouvez soustraire deux dates. vous pouvez passer le premier argument comme minute, jour, mois, année, etc.