postgresql函数/触发两个日期之间的天数

时间:2014-01-14 15:36:26

标签: function postgresql date triggers

我想创建计算两个日期之间的天数的函数,结果存储在表格中的列

功能和触发器:


CREATE FUNCTION dur()

    RETURNS TRIGGER
    AS $$
       BEGIN 
          NEW.duration = NEW.dateTO - NEW.dateFROM;
          INSERT INTO calc(duration) VALUES (NEW.duration);
          RETURN NEW;
       END;
    $$ LANGUAGE plpgsql;

 CREATE TRIGGER dur
  BEFORE INSERT ON calc
  FOR EACH ROW EXECUTE PROCEDURE dur();

表:

CREATE TABLE calc(

   idU SERIAL PRIMARY KEY,
   dateFROM DATE NOT NULL,
   dateTO DATE NOT NULL,
   duration INTEGER );

当我出现新的INSERT INTO错误时出现:

  

PL / pgSQL函数“dur”在SQL语句中的第4行    SQL语句“INSERT INTO calc(duration)VALUES(NEW.duration)”

2 个答案:

答案 0 :(得分:1)

您没有发布错误,只是导致错误的声明。

切入追逐:摆脱那个插入语句。您可能会级联触发器,导致它一次又一次地调用自己。设置NEW.dur然后返回NEW将在您要插入的行中设置该值。

答案 1 :(得分:0)

如果我明白了,你必须自动计算duration字段,如果是这样,你就是要删除:

 INSERT INTO calc(duration) VALUES (NEW.duration);

因为您已经使用以下方式计算了该字段:

  NEW.duration = NEW.dateTO - NEW.dateFROM;