在项目开发过程中,我们经常需要查询某些即将到期的资源信息,并给相关的人通过邮件等形式进行提醒。这类需求非常普遍,今天写了一个Demo,能够代表这类问题的解决方案,结合轮询机制,能够很好滴解决此类问题。
1.创建数据
ps:这里涉及到了表变量及Union All语法,不明白的请自行脑补!
传送门:
1.表变量
http://database.51cto.com/art/201011/233290.htm
2.Union 和 Union All
http://www.w3school.com.cn/sql/sql_union.asp
--Insert test records
INSERT INTO @Employees
SELECT 'Ryan', '1972-06-01' UNION ALL
SELECT 'James', '1985-06-02' UNION ALL
SELECT 'Jasson', '1983-06-03' UNION ALL
SELECT 'Tara', '1991-06-04' UNION ALL
SELECT 'William', '1992-06-05' UNION ALL
SELECT 'Judy', '1989-06-06' UNION ALL
SELECT 'Justin', '1989-06-07';
2.设置间隔日期
--Variable to provide required number of days
DECLARE @IntervalDays INT;
SET @IntervalDays = 3;
3.查询结果
SELECT *
FROM @Employees
WHERE DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, ExpiredDate), ExpiredDate)
BETWEEN CONVERT( DATE, GETDATE())
AND CONVERT( DATE, GETDATE() + @IntervalDays);
4.通常都是查询一周内即将到期的,我们可以使用如下sql
SELECT *
FROM @Employees
WHERE DATEPART( Week, DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, ExpiredDate), ExpiredDate))
= DATEPART( Week, GETDATE());
第一种和第二种sql查询结果如下: