postgres - 创建触发器以使用新格式的另一个字段更新字段

时间:2017-11-07 22:59:33

标签: postgresql pg

我有一个带有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

1 个答案:

答案 0 :(得分:0)

好吧,我设法搞清楚了。我需要的关键是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; 

感谢合并后的答案: