1

亲爱的,
我想在 postgres 中创建一个序列,就像 0000000001 到 00nnnnnnnnn 通常我们可以创建从 1 到 n ,但我希望它前面有 0
有没有简单的方法可以做到这一点?

4

2 回答 2

6

序列是数字生成器,数字没有'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
);
于 2013-06-11T09:40:31.297 回答
2

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

我不确定您为什么要这样做,但是您可以将序列号转换为字符串并在前面加上适当数量的0字符,如下所示:

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

其中 7 是您需要的总位数(如果数字超过该位数,代码可能会停止工作)。

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

CREATE SEQUENCE myseq;
于 2013-06-11T09:38:02.773 回答