我想为表创建一个事件: -
ACCOUNTS(id char(5),balance decimal(10,2), date_created date)
DATE_CREATED
列的值始终为= NOW()
,即表格中插入行的日期
根据DATE_CREATED
列,我希望每行的余额在每31天后增加2%,即每行(DATE_CREATED+31 Days
之后)
我想知道它是否可能,如果有可能那么它的代码是什么?
答案 0 :(得分:3)
您需要撰写使用UPDATE
和DATEDIFF
MOD
语句
尝试类似:
UPDATE Accounts
SET Balance = Balance * 1.02
WHERE DATEDIFF(now(),date_created) MOD 31 = 0;
这是SQL Fiddle。
您可以安排此操作每天运行。这可能是你最好的方法。
祝你好运。答案 1 :(得分: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;
如果您正在寻找从今天起有31天间隔Created_Date
的更新数据,那么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