Генерация серии, например, от 0001 до чего-то в postgres - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу генерировать числа от мин до макс.У меня есть встроенная функция в postgres generate_series (int, int), которая может легко это сделать.Моя проблема в том, что я работаю с текстовым полем, потому что я хотел бы захватить значения, такие как 0001. Если нет другой встроенной функции, которая может сохранить этот формат, я бы тогда хотел извлечь предыдущие нули, а затем добавить их в функцию generate_series (int, int).Любое решение по этому поводу будет оценено.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы можете использовать to_char() для форматирования чисел, возвращаемых generate_series()

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

FM удаляет начальные пробелы из вывода.

Онлайн пример: https://rextester.com/IWET48678

0 голосов
/ 17 декабря 2018

Сначала создайте последовательность, чтобы получить идентификатор в виде целого числа:

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' и т. д.

Помните, что при вызовеФункция, значение которой будет всегда увеличиваться, будет работать как первичный ключ.

...