mysql在一个表中显示不同的时间间隔
我们创建了一个数据库,其中包含了我们大学需要在不同日期进行维护的各种设备。维护间隔也不同(有时每月,有时每2周等)。 现在,我们希望有一个列,如果您更改维护日期,它会自动更新自身。我们通常使用的是mysql在一个表中显示不同的时间间隔,mysql,sql,date,intervals,Mysql,Sql,Date,Intervals,我们创建了一个数据库,其中包含了我们大学需要在不同日期进行维护的各种设备。维护间隔也不同(有时每月,有时每2周等)。 现在,我们希望有一个列,如果您更改维护日期,它会自动更新自身。我们通常使用的是 UPDATE table SET NextMaintDate = MaintDate + INTERVAL 1 month 因此,NextMaintDate的每个日期都是MaintDate之后的一个月。是否有可能使用不同的维护日期来设置不同的间隔时间?在下列情况下使用案例: UPDATE table
UPDATE table SET NextMaintDate = MaintDate + INTERVAL 1 month
因此,NextMaintDate的每个日期都是MaintDate之后的一个月。是否有可能使用不同的维护日期来设置不同的间隔时间?在下列情况下使用
案例:
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
如果使用MySQL5.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
或storaged
,具体取决于您是要动态计算列还是实际保存数据
对于其他间隔,您可以添加更多的计算列。您可以修改表格,使其包含两列:
maintenance\u interval\u type
是间隔的类型
maintenance\u interval\u 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);
这不需要更改数据结构。当我尝试此操作时,在“字段列表”@Kiekster中得到错误未知列“type”。您必须将该列包含在数据中。@Kiekster:必须有一些内容指示适用的时间间隔。我用一个名为type
的专栏做了一个例子。您的记录将包含另一列或您将使用的其他列。