SQL SERVER - 选择即将到来的30天的数据,以及1年以上的数据

时间:2015-05-20 11:43:30

标签: sql sql-server date datetime

对于我的项目,我需要找到一个查询,查找即将到来的30天的数据,还需要1年。

以下是一个例子:

- 我在2014-01-31进行了培训并完成了我的培训,我需要在1年后(2015-01-31)做一次提醒。

- 但是,我想在我的数据库中选择此提醒,在提醒日期之前至少30天。

-SO,我的目标是提醒2015-01-31至2015-01-31。

这是我的代码的一个例子,因为我的英语不好(我是法国IT学生),我无法解释真的很好......:/

select nom, libelle_produit, nom_produit, date_debut_formation, date_fin_formation,
       DATEADD (day , 365 , date_fin_formation) as 'Date limite' 
from T_PRODUIT 
    join T_FORMATION  on T_FORMATION.id_produit=T_PRODUIT.id_produit 
    join T_SUIT on T_SUIT.id_formation=T_FORMATION.id_formation 
    join T_EMPLOYES on T_EMPLOYES.id_employe = T_SUIT.id_employe 
where DATEADD(year,1,year(date_fin_formation)) <= DATEADD(year,1,getdate())
  and DATEADD(month,1,month(date_fin_formation)) <= DATEADD(month,1,getdate())
  and DATEADD (day,1,day(date_fin_formation)) <= DATEADD(day,-30,GETDATE())
你能帮帮我吗?这不会给我一个好结果......

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你想要

如果

,今天所有提醒都会显示
  • date_fin_formation小于(今天的日期 - 1年)+ 30天
  • date_fin_formation大于今天的日期 - 1年

即。通知应从(今天的日期 - 1年)+ 30天开始,直到(今天的日期 - 1年)

您可以使用像DATEADD(year,1,date_fin_formation) BETWEEN DATEADD(day,-30,getdate()) AND GETDATE()这样的WHERE子句,而您的查询将是。

select nom, libelle_produit, nom_produit, date_debut_formation, date_fin_formation, DATEADD (day , 365 , date_fin_formation) as 'Date limite' 
  from T_PRODUIT 
    join T_FORMATION  on T_FORMATION.id_produit=T_PRODUIT.id_produit 
    join T_SUIT on T_SUIT.id_formation=T_FORMATION.id_formation 
    join T_EMPLOYES on T_EMPLOYES.id_employe = T_SUIT.id_employe 
     WHERE DATEADD(year,1,date_fin_formation) BETWEEN  DATEADD(day,-30,getdate()) AND GETDATE()