生成从0001到postgres中的东西的序列

时间:2018-12-17 07:00:33

标签: postgresql generate-series

我想生成一个从最小到最大的数字。我在postgres generate_series(int,int)中有一个内置函数,可以很容易地做到这一点。我的问题是正在处理文本字段,因为我想捕获像0001这样的值。如果没有其他可以保持此格式的内置函数,则我想提取前面的零,然后将它们附加到函数generate_series( int,int)。任何对此的解决方案将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用to_char()来格式化generate_series()返回的数字

select to_char(n, 'FM0000')
from generate_series(1,1000) as x(n);

FM从输出中删除前导空白。

在线示例:https://rextester.com/IWET48678

答案 1 :(得分:-1)

首先创建一个序列以将id作为整数:

create sequence test;

然后创建一个sql函数以将值返回为varchar:

create or replace function ser() returns varchar as
$$
select right('000' || nextval('test')::varchar,4) as id;
$$
language sql;

要在语句中获取递增的值,可以调用函数ser(),该函数将始终以varchar的形式返回序列的新值:

“ 0001” '0002' '0003' 等等

请记住,当您调用函数时,该值将始终递增,因为它将像主键一样工作。