【问题标题】:postgres - Creating a trigger to update a field with another field in new formatpostgres - 创建触发器以使用新格式的另一个字段更新字段
【发布时间】:2018-04-20 11:55:44
【问题描述】:

我有一个带有 name 字段的事务表,其值如下:

  • TX-0000001306
  • TX-0000001307

它们目前由服务器端脚本创建,具有以下逻辑:

var zeros = '0000000000'+(Number(transactionCount) + 1);
return 'TX-'+zeros.substr(zeros.length - 10);

因为每次创建这个数字时,我都会从数据库中提取当前的交易数量,所以我不想再使用它了。

我现在想用 postgres 触发器来做这件事。我已经非常接近解决方案,但是我无法弄清楚如何在前导零之前添加被数字抵消的前导零。为简单起见,我使用自动递增的id 字段。

CREATE OR REPLACE FUNCTION getTransactionName()
RETURNS "trigger" AS
$BODY$
BEGIN
 NEW.name:= CONCAT('TX-', NEW.id);
 Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE; 

CREATE TRIGGER createTransactionName
  BEFORE INSERT ON transaction__c
  FOR EACH ROW
  EXECUTE PROCEDURE getTransactionName();

上面的触发器产生这个:

  • TX-1701
  • TX-1702

如何将其转换为 10 位格式?

  • TX-0000001701
  • TX-0000001702

【问题讨论】:

    标签: postgresql pg


    【解决方案1】:

    好吧,我设法弄明白了。我需要的关键是to_char()

    CREATE OR REPLACE FUNCTION getTransactionName()
    RETURNS "trigger" AS
    $BODY$
    BEGIN
     NEW.name:= CONCAT('TX-', to_char(NEW.id, 'fm0000000000'));
     Return NEW;
    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE; 
    

    感谢综合答案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2019-09-08
      • 1970-01-01
      • 2013-04-14
      • 2015-02-11
      • 2011-04-27
      相关资源
      最近更新 更多