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 天內過期的記錄。

相關內容