字段默认值一般填写一个固定值。
现在有个特殊需求是订单号字段,长度固定为10位,要求前5位为固定值 ,后5位是递增值。
可如下实现:
首先建一个序列:
CREATE SEQUENCE test_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 99999
CACHE 1;
然后建表,例如:
CREATE TABLE test
(
test character varying(10) COLLATE pg_catalog."default" NOT NULL DEFAULT ('11111'::text || to_char(nextval('test_seq'::regclass), 'fm00000'::text)),
sss integer,
CONSTRAINT test_pkey PRIMARY KEY (test)
USING INDEX TABLESPACE postgres
)
其中:
to_char第2个参数加'fm'表示按要求转换为固定长度的字符串且前面不留空格。
不过,订单号一般作为表的外键,还是用数字效率高,不建议用字符串,当然里面如果必须有非数字的字符的话另当别论。
ALTER TABLE test
ADD COLUMN vvv bigint DEFAULT to_number(('11111'::text || to_char(nextval('test_seq'::regclass), 'fm00000'::text)), '9999999999'::text);
转换为数字保存。
执行插入数据,多插了几条:
insert into test(sss) values(1);
查询数据结果: