2

我想为表创建一个事件:-

ACCOUNTS(id char(5),balance decimal(10,2), date_created date)

DATE_CREATED列的值将始终为 = NOW(),即该行插入表中的日期

我希望每行的余额在每 31 天后增加 2% ,根据其 DATE_CREATED列,即DATE_CREATED+31 Days每行的 () 之后。

我想知道这是否可能,如果可能,那么它的代码是什么?

4

2 回答 2

3

您需要编写一个UPDATE使用DATEDIFFMOD

尝试类似:

UPDATE Accounts 
SET Balance = Balance * 1.02 
WHERE DATEDIFF(now(),date_created) MOD 31 = 0;

这是SQL Fiddle

您可以安排它每天运行。这可能是你最好的方法。

祝你好运。

于 2013-02-02T14:58:49.693 回答
2

这将每天运行,但基于where clause它将更新表。

CREATE EVENT `myEvent`
ON SCHEDULE AT CURRENT_TIMESTAMP
DO BEGIN
    -- update balance by 2%
    UPDATE yourtable
    SET balance = balance * 1.02
    WHERE DateDiff(CurDate(), created_date) MOD 31 = 0
END;

如果您正在寻找Created_Date从今天起有 31 天间隔的更新,那么Where clause

WHERE Date_Format(Date_Add(CurDate(), interval 31 day),'%Y-%m-%d') = Date_Format(CurDate(),'%Y-%m-%d')

或者

WHERE DateDiff(CurDate(), created_date) = 31

于 2013-02-02T15:02:56.347 回答