Я бы сделал это с 2 regexp_replace следующим образом:
with the_string as (
select 'AAAAAA 8 BBBBBB 5' s from dual
),
the_string_with_numbers_done as (
select regexp_replace (s,' (\d)','-\1') s from the_string
)
select regexp_replace (s,' ','_-_') from the_string_with_numbers_done
;
Вот информация о regexp_replace: https://docs.oracle.com/database/121/SQLRF/functions163.htm#SQLRF06302
И этот сайт мне нравится использовать для работы на регулярной основе.выражения: https://regexr.com/
Редактировать: Слегка измененная версия, основанная на более поздних комментариях от OP - для измененной обработки пробелов, так как OP, кажется, хочет обрабатывать последовательные пробелы как единицу в некоторых / всех случаях,Требования все еще не ясны мне на 100%, особенно то, что blank blank number
должно стать: dash number
или underscore dash underscore dash number
.Ниже версия делает первый (dash number
).HTH
with the_string as (
select 'AAAAAA 8 BBBBBB 5' s from dual
),
the_string_with_numbers_done as (
select regexp_replace (s,' +(\d)','-\1') s from the_string
)
select regexp_replace (s,' +','_-_') from the_string_with_numbers_done
;+