select emp# 
from emp 
where dateadd(YY,1,[Completed Date]) in (getdate() - 30,getdate()) 
我正在检查完成日期是否为一年,应该是下一个开始日期的 30 天。
例如:培训于 2012 年 3 月 22 日完成
需要在 22/3/2013 重考
我需要证明他在接下来的 30 天批次中。
select emp# 
from emp 
where dateadd(YY,1,[Completed Date]) in (getdate() - 30,getdate()) 
我正在检查完成日期是否为一年,应该是下一个开始日期的 30 天。
例如:培训于 2012 年 3 月 22 日完成
需要在 22/3/2013 重考
我需要证明他在接下来的 30 天批次中。
如果您想查看下一次培训(最后一次培训 + 1 年)的所有人都在接下来的 30 天内,或者 PAST DUE,试试这个:
select *, dateadd(YY, 1, [Completed Date]) nextTraining
from emp
where dateadd(YY, 1, [Completed Date]) < getdate()+30
您不能IN像上面尝试的那样使用。相反,您可以使用BETWEEN或我的首选,大于和小于:
select emp# 
from emp 
where dateadd(YY,1,[Completed Date]) >= getdate()-30
   and dateadd(YY,1,[Completed Date]) <= getdate()
不确定您是否需要该子句AND中的标准WHERE,但如果您这样做,它就在那里。我还建议使用“year”而不是“YY”,但它们都可以。