DATEDIFF() 拒绝在 MySQL 事件上运行

DATEDIFF() 拒绝在 MySQL 事件上运行

我想创建一个每天运行的事件,并查看帐户是否即将过期。soon_expires稍后,Bash 脚本将使用该单元向相关用户发送电子邮件,告知其相关情况。

这是我的事件的内容(使用 phpmyadmin):

SELECT * FROM users;

IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN
    SET soon_expires = 1; 
ELSE 
    SET soon_expires = 0; 
END IF;

然而它返回一个错误,说

#1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN SET soon_expires = 1; EL' at line 3

我还尝试创建一个触发器,它按预期工作。但我意识到触发器仅在行更新时运行 -expirationtime或多或少是静态的,因此触发器是不够的。

答案1

CREATE EVENT check_expire
ON SCHEDULE
EVERY 1 DAY
STARTS '2019-08-21'
DO
UPDATE users
SET soon_expires = (DATEDIFF(expirationtime, CURRENT_DATE) < 45);

或者

UPDATE users
SET soon_expires = 1
WHERE DATEDIFF(expirationtime, CURRENT_DATE) < 45;

第一个变体更新表中的所有记录,第二个变体仅更新那些将在 45 天内过期的记录。

相关内容