Как преобразовать число в трехсимвольную строку с помощью последовательности Oracle

Мне нужно создать последовательность Oracle 12c и преобразовать ее из числа в трехсимвольную строку в формате 001, 002, 003 и т. д.

Вот пример последовательности:

CREATE SEQUENCE supplier_seq
  MINVALUE 1
  MAXVALUE 999
  START WITH 1
  INCREMENT BY 1
  CACHE 1;

Взяв приведенную выше последовательность, мне теперь нужно преобразовать ее в строку из трех символов, как показано выше.

Число не имеет лидирующих нулей. Вы мог сохраняете его как строку, дополненную нулями, но обычно вы сохраняете ее как число. Как вы будете использовать это, чтобы предоставить значение первичного ключа? Какой тип данных представляет собой столбец таблицы, который вы будете заполнять последовательностью?

Alex Poole 28.05.2019 15:25

Да, конечно - последовательность числовая. Предполагая, что я оставлю последовательность как есть и, судя по ее внешнему виду, тип данных столбца — VARCHAR2 — могу ли я просто использовать LPAD?

tonyf 28.05.2019 15:30

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

hotfix 28.05.2019 15:37

@hotfix - звучит хорошо.

tonyf 28.05.2019 15:39

Если ваш вопрос заключается в том, как преобразовать число в трехсимвольную строку, я бы использовал to_char(supplier_seq.nextval, 'FM000'). Но это зависит от того, что вы с ним делаете.

Alex Poole 28.05.2019 15:40

Всем спасибо за помощь - обновлен оригинальный вопрос. @AlexPoole, если бы вы могли добавить свой комментарий в качестве решения, это было бы здорово.

tonyf 28.05.2019 15:47

Вы используете сгенерированную последовательность для создания значений числовой для столбца первичного ключа (предположительно). Формат 003Только, связанный с презентацией (отчеты и т. д.). Лучший вариант — сохранить значения в числовом формате. Всякий раз, когда вам нужно настоящее время их как строки, используйте to_char(supplier_seq, 'fm009'). Обратите внимание на fm, в частности; без него числа будут иметь начальный пробел (заполнитель для знака плюс или минус).

mathguy 28.05.2019 15:51

@ Radagast81 - в Oracle последовательности работают иначе.

APC 28.05.2019 16:54

В чем преимущество хранения числового значения в виде строки символов, дополненной начальными нулями? Пытливые умы хотят знать.

APC 28.05.2019 16:57

@APC спасибо за разъяснения, но я думаю, что вы все равно можете получить промежутки в 20 с кешем, установленным на 20, чего вы хотите избежать, если в последовательности у вас есть только 1 тыс. значений. Я знаю, что пробелы в последовательностях — это нормально, но с таким малым количеством возможных значений вы хотите избегать их, насколько это возможно...

Radagast81 29.05.2019 09:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Невозможно использовать единственную последовательность.

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

SELECT LPAD(supplier_seq.nextval,3,0) FROM DUAL; -- 001, 002, 003

Надежда, это то, что вы ищете.

Другие вопросы по теме