Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Calculated Columns_Difference - Fatal编程技术网

Mysql 在保存或更新时自动插入日期列之间经过的天数

Mysql 在保存或更新时自动插入日期列之间经过的天数,mysql,date,calculated-columns,difference,Mysql,Date,Calculated Columns,Difference,在表格中,我在workdates表格中有以下列: ID StartDate EndDate NumDays 1 2014-05-03 2014-06-06 31 我希望NumDays列自动完成(自动插入)每个新列或StartDate或EndDate列的每次更新从StartDate到EndDate的天数。在上面的例子中,它是31天,但在这一点上,我手动输入它 在这种情况下,我是否有use触发器,以及“天”列应该是什么类型?也许是这样的 DELIMITER $$ DR

在表格中,我在workdates表格中有以下列:

ID    StartDate    EndDate    NumDays
1     2014-05-03   2014-06-06 31
我希望NumDays列自动完成(自动插入)每个新列或StartDate或EndDate列的每次更新从StartDate到EndDate的天数。在上面的例子中,它是31天,但在这一点上,我手动输入它

在这种情况下,我是否有use触发器,以及“天”列应该是什么类型?也许是这样的

DELIMITER $$
DROP TRIGGER IF EXISTS tg_days_number_insert$$
CREATE TRIGGER tg_days_number_insert
BEFORE INSERT ON workdates
FOR EACH ROW
BEGIN
    UPDATE reg_add SET days = DATEDIFF(EndDate(),StartDate);
END$$
DELIMITER;

谢谢。

您的更新与您的逻辑不符,因为更新位于不同的表中,但您似乎希望在
工作日中设置该列。这是你想要的吗

DELIMITER $$
DROP TRIGGER IF EXISTS tg_days_number_insert$$
CREATE TRIGGER tg_days_number_insert
BEFORE INSERT ON workdates
FOR EACH ROW
BEGIN
    SET NEW.days = DATEDIFF(NEW.EndDate, NEW.StartDate);
END$$
DELIMITER;

是我的错,我从别的地方复制了触发码。表名是“workdates”,这就是我想要处理的表名。此外,我无意中更改了您的代码(虽然可能是正确的),而不是上面的代码。我已将NEW.total_days更改为NEW.days,假设“days”保留为“days”列名。@user3387040。也许它应该是
numDays
,就像问题中的示例数据一样。(我使用了
total_days
,因为它在示例代码中。)