我一直在写一个小脚本,应该在该日期前30天检查过期日期并发送电子邮件提醒。
我有一个名为'completed'
的列的表,表示课程完成,完成的日期。每门课程有效期为1年。
我一直试图做的是首先在“completed
”添加一整年,然后检查新日期是否恰好在now().
之前30天
示例:该课程于2012年12月31日结束。有效期至2013年12月31日,因此如果TODAY
为2013年12月1日,则应发送电子邮件提醒。
我有这个小脚本:
SELECT distinct
userID
, completed+INTERVAL 1 YEAR AS expires
FROM activity
WHERE completed > NOW() + INTERVAL 30 DAY
但显然它不能胜任这项工作...... 有人能指出我正确的方向吗?
谢谢! 干杯, 格雷格
答案 0 :(得分:1)
这里你真正需要做的就是将+INTERVAL 1 YEAR
放到WHERE中。你可以用简单的代数来做到这一点。
completed + (1 YEAR) > NOW + (30 DAYS)
与
相同completed > NOW + (30 DAYS) - (1 YEAR)
给予
SELECT distinct
userID,
ADDDATE(completed,INTERVAL 1 YEAR) AS expires
FROM activity
-- Used CURRENT_DATE so that time of day is not a factor
WHERE completed > SUBDATE(ADDDATE(CURRENT_DATE,INTERVAL 30 DAY), INTERVAL 1 YEAR)
答案 1 :(得分:0)
Euhm,这个:
SELECT distinct
userID
, completed+INTERVAL 1 YEAR AS expires
FROM activity
WHERE completed+INTERVAL 1 YEAR > NOW() + INTERVAL 30 DAY