Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql在一个表中显示不同的时间间隔_Mysql_Sql_Date_Intervals - Fatal编程技术网

mysql在一个表中显示不同的时间间隔

mysql在一个表中显示不同的时间间隔,mysql,sql,date,intervals,Mysql,Sql,Date,Intervals,我们创建了一个数据库,其中包含了我们大学需要在不同日期进行维护的各种设备。维护间隔也不同(有时每月,有时每2周等)。 现在,我们希望有一个列,如果您更改维护日期,它会自动更新自身。我们通常使用的是 UPDATE table SET NextMaintDate = MaintDate + INTERVAL 1 month 因此,NextMaintDate的每个日期都是MaintDate之后的一个月。是否有可能使用不同的维护日期来设置不同的间隔时间?在下列情况下使用案例: UPDATE table

我们创建了一个数据库,其中包含了我们大学需要在不同日期进行维护的各种设备。维护间隔也不同(有时每月,有时每2周等)。 现在,我们希望有一个列,如果您更改维护日期,它会自动更新自身。我们通常使用的是

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

如果使用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
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
的专栏做了一个例子。您的记录将包含另一列或您将使用的其他列。