首页 > 解决方案 > 在 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)增量使用序列。请建议我。

标签: sqlpostgresql

解决方案


创建一个序列,然后将DEFAULT子句用于所需的表达式。

SQL小提琴

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 |

推荐阅读