Мне нужно заменить первый da sh (-) на нули, чтобы общая длина была ровно 18
. Вы можете деконструировать строку, а затем собрать ее обратно :
select (regexp_substr(str, '[^-]+', 1, 1) ||
rpad('0', 19 - length(str), '0') ||
regexp_substr(str, '[^-]+', 1, 2) || '-' ||
regexp_substr(str, '[^-]+', 1, 3)
)
from t;
Обратите внимание, что это возвращает результаты, которые вы описываете , а не результаты, приведенные в вопросе - я предполагаю, что у вас есть опечатка.
Здесь - это дБ <> скрипка
. Это легко включить в update
:
update t
set str = (regexp_substr(str, '[^-]+', 1, 1) ||
rpad('0', 19 - length(str), '0') ||
regexp_substr(str, '[^-]+', 1, 2) || '-' ||
regexp_substr(str, '[^-]+', 1, 3)
);