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とを使用するステートメントを作成する必要がありDATEDIFFますMOD

次のようなものを試してください:

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

そして、これがSQLFiddleです。

これを毎日実行するようにスケジュールできます。それがおそらくあなたの最善のアプローチです。

幸運を。

于 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 に答える