【问题标题】:postgresql function/trigger days between two datespostgresql 函数/触发两个日期之间的天数
【发布时间】:2014-02-02 17:50:54
【问题描述】:

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

函数和触发器:


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)”

【问题讨论】:

    标签: function postgresql date triggers


    【解决方案1】:

    你没有发布错误,只是导致错误的语句。

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

    【讨论】:

      【解决方案2】:

      如果我理解,您必须自动计算duration 字段,如果是这样,您只需删除:

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

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

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

      【讨论】:

      • 删除“INSERT INTO calc(duration) VALUES (NEW.duration);”时有效我还有一个问题!如何添加一个函数来计算表中添加的所有较早日期的持续时间。
      猜你喜欢
      • 2019-04-12
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2014-06-12
      相关资源
      最近更新 更多