亲爱的,
我想在 postgres 中创建一个序列,就像 0000000001 到 00nnnnnnnnn 通常我们可以创建从 1 到 n ,但我希望它前面有 0
有没有简单的方法可以做到这一点?
问问题
2706 次
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 序列只能返回INTEGER
或BIGINT
值,所以通常数字1
和0000001
被认为是相同的,1
是规范表示。
我不确定您为什么要这样做,但是您可以将序列号转换为字符串并在前面加上适当数量的0
字符,如下所示:
SELECT repeat('0', 7 - length(nextval('myseq'))) || currval('myseq')::text
其中 7 是您需要的总位数(如果数字超过该位数,代码可能会停止工作)。
请注意,您需要创建序列 myseq 作为数字的来源:
CREATE SEQUENCE myseq;
于 2013-06-11T09:38:02.773 回答