DATEDIFF() se recusa a rodar em um evento MySQL

DATEDIFF() se recusa a rodar em um evento MySQL

Quero criar um evento que será executado todos os dias e ver se uma conta expira em breve. A soon_expirescélula será posteriormente utilizada por um script Bash que envia um e-mail ao usuário relacionado informando-o da situação.

Este é o conteúdo do meu evento (usando phpmyadmin):

SELECT * FROM users;

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

No entanto, ele retorna um erro, dizendo

#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

Também tentei criar um gatilho, que funcionou conforme o esperado. Mas percebi que um gatilho será executado somente quando a linha for atualizada - expirationtimeé mais ou menos estática, portanto, um gatilho não será suficiente.

Responder1

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

ou

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

A primeira variante atualiza todos os registros da tabela, a segunda atualiza apenas os registros que expirarão em 45 dias.

informação relacionada