Создайте серийный номер, используя символы и порядковый номер в PostgreSQL.
Я хотел бы создать серийный номер/код, который выглядит примерно так: 22LX346789. Две левые цифры обозначают год (год изготовления/регистрации), две цифры обозначают тип продукта. Правильные числа увеличиваются, и их не требуется сбрасывать, когда начинается новый год. Таким образом, если последний серийный номер на 2021 год был, скажем, 21LX346789, то первый серийный номер на 2022 год будет 22LX346790. 346789 .... будет увеличиваться независимо от года или типа продукта.
Как я могу объединить это с помощью генератора последовательностей PostgreSQL и сохранить результат в столбце таблицы PostgreSQL? В идеале я хотел бы сохранить процесс внутри PostgreSQL.
И это значение не будет использоваться в качестве первичного индекса.
заранее спасибо
2 ответа
Вы можете создать последовательность следующим образом:
CREATE SEQUENCE product_seq;
Это создает 64-битную последовательность. Затем вы можете получить следующее значение последовательности, вызвавnext_val(product_seq)
. Когда вы вставляете строку в свою таблицу, вы можете объединить различные части идентификатора вашего продукта:
INSERT INTO my_table (product_id)
VALUES(concat(extract(year from current_date) - 2000,
product_code,
lpad(next_val(product_seq)::text, 6, '0')
)
)
The lpad()
функция дополняет строку символом до указанной длины.
При выполнении INSERT в вашей таблице вы должны предоставитьCONCAT(EXTRACT(year FROM now()), product_code, nextval(sequence_name))
как значение для столбца с порядковыми номерами.