我需要帮助来创建将生成协议编号的触发器。必须遵循以下顺序:
323926YYYYMMDDXXXXXX
- 323926 = 固定数字
- YYYY = 年
- MM = 月份
- DD = 天
- XXXXXX = 我们必须从 1 自动生成的数字将变为 999999
我的难点在于这个递增的数字在一天的过程之后应该返回到000001,总结一下:每天第一个生成的协议必须以数字000001开头
我的代码:
CREATE OR REPLACE FUNCTION crm.novo_ticket()
RETURNS trigger AS
$BODY$
BEGIN
NEW.protocolo = '323926' || TO_CHAR(NEW.data_cadastro,'YYYYMMDD') || '000001';
RETURN NEW;
END $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
挑出来
SELECT
lpad(CAST((SELECT COUNT(1) + 1 INTO quant
FROM
crm.ticket a
WHERE
a.data_cadastro::DATE = CURRENT_TIMESTAMP(0)::DATE;)as VARCHAR),6,'0');
我不会这样做,我会将它们全部分开存储并使用函数生成它们。
现在查询它,
如果这还不够好,你总是可以从中创建一个视图或物化视图......
我为什么要这样做?更高效的存储。您将输入存储到函数中,而不是我认为更干净的输出。您可以轻松使用 date 或 int 索引。
最后,如果你愿意,你可以将触发器插入到另一个表中,id 和调用的结果
to_protoid
你可以这样做,但我不会。我不会将 protoid 用于任何内部。我会使用您的常规id
并按照演示生成它。挑出来