sql - 在 postgresql 中序列增量为 2018AA00001
问题描述
我使用以下查询创建了 generate_letters 和 generate_num 表
select chr(i) as letter from generate_series(65,90) i;
select lpad(i::text,6,'0') as num from generate_series(1,100000) i;
使用以下查询对两个表进行交叉连接后
select concat_ws('','2018',gl1.letter,gl2.letter,d.num) as seq
from generate_letters gl1
cross join generate_letters gl2
cross join generate_num d limit 10;
我得到了输出结果(
2018AA000001
2018AA000002
2018AA000003
2018AA000004
2018AA000005
)
但是我需要如何使用上述查询对列(bill_id)增量使用序列。请建议我。
解决方案
创建一个序列,然后将DEFAULT
子句用于所需的表达式。
PostgreSQL 9.6 架构设置:
CREATE SEQUENCE yourseq INCREMENT 1 START 1 MINVALUE 1;
CREATE TABLE yourtable
(
bill_id TEXT DEFAULT '2018AA'||lpad(NEXTVAL('yourseq'::regclass)::text, 6
, '0' ),
bill_desc TEXT
);
INSERT INTO yourtable(bill_desc) VALUES ('Telephone Bill');
INSERT INTO yourtable(bill_desc) VALUES ('Water Bill');
查询 1:
select * FROM yourtable
结果:
| bill_id | bill_desc |
|--------------|----------------|
| 2018AA000001 | Telephone Bill |
| 2018AA000002 | Water Bill |