各位好,
我想在PostgreSQL中创建一个类似于0000000001到00nnnnnnnnn的序列。
通常我们可以从1到n创建,但我希望前面加上0。
有没有简单的方法来做到这一点?
各位好,
我想在PostgreSQL中创建一个类似于0000000001到00nnnnnnnnn的序列。
通常我们可以从1到n创建,但我希望前面加上0。
有没有简单的方法来做到这一点?
序列是数字生成器,一个数字没有左侧填充的 '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
);
PostgreSQL序列只能返回INTEGER
或BIGINT
值,因此通常数字1
和0000001
被认为是相同的,1
是规范表示。
我不确定你为什么要这样做,但你可以将序列号转换为字符串,并在前面添加适当数量的0
字符,类似于以下内容:
SELECT repeat('0', 7 - length(nextval('myseq'))) || currval('myseq')::text
在这里,7是你需要的总位数(如果数字超过此位数,代码可能无法正常工作)。
请注意,您需要创建名为myseq的序列作为您的数字来源:
CREATE SEQUENCE myseq;