我们在大学创建了一个不同类型设备的数据库,需要在不同的日期进行维护。维护间隔也不同(有时每月,有时每2周等)。 现在,如果您更改维护日期,我们希望有一个自动更新的列。我们一般使用的是
UPDATE table SET NextMaintDate = MaintDate + INTERVAL 1 month
因此,NextMaintDate的每个日期都是MaintDate之后的一个月。是否有可能使用不同的MaintDate来使用不同的间隔?
答案 0 :(得分:1)
使用CASE WHEN
:
UPDATE table SET NextMaintDate =
CASE WHEN type = 'monthly' THEN MaintDate + INTERVAL 1 month
WHEN type = 'weekly' THEN MaintDate + INTERVAL 1 week
WHEN type = 'daily' THEN MaintDate + INTERVAL 1 day
END
答案 1 :(得分:0)
如果使用MySQL 5.7.6
或更高版本,则可以在表定义中使用计算列:
CREATE TABLE yourTable (
id INTEGER NOT NULL PRIMARY KEY,
MaintDate DATETIME NOT NULL,
...
NextMaintDate AS DATE_ADD(MaintDate, INTERVAL 1 MONTH)
);
现在每当MaintDate
列更新时,NextMaintDate
也会自动更新(至少在逻辑上)。
您可以为生成的列选择VIRTUAL
或STORED
,具体取决于您是要动态计算列还是实际保留数据。
关于其他间隔,您可以添加更多计算列。
答案 2 :(得分:0)
您可以将表修改为两列:
maintenance_interval_type
是区间的类型maintenance_interval_num
是数字然后你可以这样做:
update t
set NextMaintDate = (case when maintenance_interval_type = 'month'
then maintdate + interval maintenance_interval_num month
when maintenance_interval_type = 'week'
then maintdate + interval maintenance_interval_num week
when maintenance_interval_type = 'day'
then maintdate + interval maintenance_interval_num day
else maintenance_interval_num
end);
我应该注意,您也可以使用显式类型来执行此操作。像这样:
update t
set NextMaintDate = (case when equipment_type in ( . . . )
then maintdate + interval 2 week
when maintenance_interval_type = 'week'
else maintdate + interval 1 month
end);
这不需要更改数据结构。