Creating a non-numeric Sequence in Postgres

时间:2016-07-11 21:49:50

标签: postgresql

I've come across a requirement to create a sequence in Postgres for generating a code (in string) which is expected to generate a unique code to increment by one for each new row and it should follow a six digit pattern.

For instance,

AC0001
AC0040
AC0201
AC3421

where the first two letters are chars and the remaining are integers.

I have created a sequence first,

CREATE SEQUENCE code_sequence START WITH 1
INCREMENT BY 1
CACHE 1;

Then, created a table,

CREATE TABLE account 
(
   code VARCHAR NOT NULL DEFAULT 'AC'||nextval('code_sequence'::regclass)::VARCHAR, 
   desc VARCHAR
);

This generates the code as AC1, AC2 etc. But, I want to have the code like AC0001, AC0002. Trying to "pad" zero's just after the 'AC'. I would appreciate, if any one suggest a solution or idea for this problem.

2 个答案:

答案 0 :(得分:0)

Use to_char() to format the number:

CREATE TABLE account 
(
   code VARCHAR NOT NULL DEFAULT 'AC'||to_char(nextval('code_sequence'), 'FM0000'), 
   "desc" VARCHAR
);

答案 1 :(得分:0)

Try the LPAD function.

CREATE TABLE account 
(
   code VARCHAR NOT NULL DEFAULT 'AC' || LPAD(nextval('code_sequence'::regclass), 4, '0')::VARCHAR, 
   desc VARCHAR
);