postgres - 创建触发器以使用新格式的另一个字段更新字段
postgres - Creating a trigger to update a field with another field in new format
我有一笔交易 table,其中 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
好吧,我设法弄明白了。我需要的关键是 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;
感谢综合回答:
我有一笔交易 table,其中 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
好吧,我设法弄明白了。我需要的关键是 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;
感谢综合回答: