postgres:创建一个像0000001到00000n的序列

时间:2013-06-11 09:18:06

标签: postgresql

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

2 个答案:

答案 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序列只能返回INTEGERBIGINT个值,因此通常数字10000001被认为是相同的,1是规范表示。< / p>

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

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

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

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

CREATE SEQUENCE myseq;