PostgreSQL:创建一个类似于0000001到00000n的序列。

4

各位好,
我想在PostgreSQL中创建一个类似于0000000001到00nnnnnnnnn的序列。
通常我们可以从1到n创建,但我希望前面加上0。
有没有简单的方法来做到这一点?


1
最好在演示层处理格式问题。在数据库中保持其为数字。 - Clodoaldo Neto
2个回答

12

序列是数字生成器,一个数字没有左侧填充的 '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
);

2

PostgreSQL序列只能返回INTEGERBIGINT值,因此通常数字10000001被认为是相同的,1是规范表示。

我不确定你为什么要这样做,但你可以将序列号转换为字符串,并在前面添加适当数量的0字符,类似于以下内容:

SELECT repeat('0', 7 - length(nextval('myseq'))) || currval('myseq')::text

在这里,7是你需要的总位数(如果数字超过此位数,代码可能无法正常工作)。

请注意,您需要创建名为myseq的序列作为您的数字来源:

CREATE SEQUENCE myseq;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接