亲爱的所有人,
我想在postgres中创建一个序列,如0000000001到00nnnnnnnnn
通常我们可以创建从1到n,但我希望它在0之前
有没有简单的方法来做到这一点???
答案 0 :(得分:4)
序列是数字生成器,数字没有'0'左边的填充...
如果要添加填充,可以使用lpad函数:
CREATE SEQUENCE my_sequence_seq;
SELECT lpad(nextval('my_sequence_seq')::text,10,'0');
你也可以在表声明中使用它:
CREATE TABLE sequence_test(
id varchar(20) NOT NULL DEFAULT lpad(nextval('my_sequence_seq')::text,10,'0'),
name text
);
答案 1 :(得分:2)
PostgreSQL序列只能返回INTEGER
或BIGINT
个值,因此通常数字1
和0000001
被认为是相同的,1
是规范表示。< / p>
我不确定您为什么要这样做,但您可以将序列号转换为字符串并添加适当数量的0
个字符,如下所示:
SELECT repeat('0', 7 - length(nextval('myseq'))) || currval('myseq')::text
其中7是您需要的总位数(如果数字超出该位数,代码可能会停止工作)。
请注意,您需要创建序列myseq作为数字的来源:
CREATE SEQUENCE myseq;