特定的postgres数据库表有21个字段,其中一个字段被设置为序列作为主键“repair_id”。另一个名为“repair_accession”的独特字段也是一种特殊的独特文本,格式如“NH13-1”。
我正在寻找一个可靠的触发功能,用于根据两个字母,两位数年份格式以及1月1日每年重置为1的自动增量编号生成唯一编号。
示例:2013年= NH13-1升至NH13-999999
并于2014年1月1日,它将自行重置并以NH14-1开始至NH14-999999
等
你的答案非常适合!!
答案 0 :(得分:0)
你没有说你正在使用什么版本,但我从Tag中假设它是9.2。 IMO,你需要在这里结合起来:
搜索和审核文档:
Create Sequencer
nextval
(获取生成ID的下一个值)setval
(通过cron作业重置)date_part
(获得年度)基本上,在触发器中,您将通过date_part获取年份并将其存储在var(例如the_year)中,然后:
NEW.repair_accession := 'NH'||the_year::text||'-'||nextval({{name of sequencer}})::text;
注意:尚未测试解决方案或代码。如果您最终将此作为答案,我请求您使用实际代码更新此答案并删除此说明。
最后一个建议,如果你不得不按这个值排序,那么我建议你用零填充音序器中的值。例如:
NH13-0000100(代替HN13-100)。如果您在插入时为每条记录添加时间戳,则可能不需要这样做。
希望这有帮助。