2013-08-23 40 views
1

我有一个两列生日和周年纪念表。我想在7天的时间内收到关于生日和周年纪念的提醒,但不应该包括年份(显然如果我包括年份,它总是会比当前日期更少)。我想提前7天得到警报。比较日期和月在SQL服务器的警报系统

也就是说,查询应该比较生日和周年纪念日与当前日期,并返回一个列表,如果他们的生日或周年纪念日在同一个月的7天之内,以便它提前通知我即将到来的生日和周年纪念日。

+0

您是否构建过任何查询..? – NREZ

+0

这里是我使用的查询: select * from customer where(MONTH(Anniversary)= MONTH(getdate()))OR(MONTH(Birthday)= MONTH(getdate())) – Dipojjal

+0

我想更具体一些日期...... 我希望日期在当前日期的一周内(7天) – Dipojjal

回答

1

从现在减去一年差要求的日期,然后用DATEDIFF计算与所请求的日期结果的日期差异。

SELECT * 
FROM Table 
WHERE DATEDIFF(dd,DATEADD(yyyy,-DATEDIFF(yyyy,Birthday,GETDATE()),GETDATE()),Birthday) BETWEEN 0 AND 7 
     OR DATEDIFF(dd,DATEADD(yyyy,-DATEDIFF(yyyy,Anniversary,GETDATE()),GETDATE()),Anniversary) BETWEEN 0 AND 7 
+0

谢谢大家的回复......您的代码在很大程度上有所帮助,但是您的代码会过滤掉任何生日或周年纪念在同一个月。虽然,我只想过滤出生日或周年纪念在当前日期后7天内的记录,以便我可以事先了解即将到来的生日和周年纪念。请记住,我只需要为即将到来的生日或周年纪念提醒。 – Dipojjal

+0

我会看到同一个月有什么问题。你可以更具体的休息吗?也许一些样本数据会有所帮助。 –

+0

我明白你的意思了。问题是,负值小于7这是一个积极的....所以要求将是一个正数和小于7.检查出来,让我知道... –

1

尝试这个

SELECT Name,max(Table .birthdate) 
    FROM Table group by Table .Name having (datediff(day,max(birthdate),getutcdate())>7 and datediff(day,max(birthdate),getutcdate())<8)