Если вы просто хотите заменить суффиксы -ex??
так, чтобы к ним всегда добавлялись последовательные суффиксы .ex0
... .ex??
, используйте регулярное выражение:
^([^-]*-[^-]*).*-ex(\d+)$
Чтобы соответствовать началустроки ^
, затем первые два термина, разделенных дефисом ([^-]*-[^-]*)
, затем прочитайте остальные символы .*
до последнего термина -ex(\d+)
в конце строки $
.
Затем вы можете использовать первые два термина и последний термин в рекурсивном предложении факторинга подзапроса для генерации последовательных суффиксов, пока не достигнете правильной глубины:
Установка Oracle :
CREATE TABLE test_data( value ) AS
SELECT 'example-dev5-ex1-ex2' FROM DUAL UNION ALL
SELECT 'example1-dev10-ex3' FROM DUAL UNION ALL
SELECT 'example2-dev99-ex2-ex7' FROM DUAL;
Запрос :
WITH rsqfc ( value, max_depth, depth ) AS (
SELECT REGEXP_SUBSTR( value, '^([^-]*-[^-]*).*-ex(\d+)$', 1, 1, NULL, 1 ) || '.ex0',
TO_NUMBER( REGEXP_SUBSTR( value, '^([^-]*-[^-]*).*-ex(\d+)$', 1, 1, NULL, 2 ) ),
0
FROM test_data
UNION ALL
SELECT value || '.ex' || (depth+1),
max_depth,
depth + 1
FROM rsqfc
WHERE depth < max_depth
)
SELECT value
FROM rsqfc
WHERE depth = max_depth;
Выход :
| VALUE |
| :--------------------------------------------- |
| example-dev5.ex0.ex1.ex2 |
| example1-dev10.ex0.ex1.ex2.ex3 |
| example2-dev99.ex0.ex1.ex2.ex3.ex4.ex5.ex6.ex7 |
db <> Fiddle здесь
Если вы просто хотите добавить .ex0
и изменить суффиксы -ex??
на .
в начале, вы можете использовать:
Oracle Query :
SELECT REGEXP_SUBSTR( value, '^[^-]*-[^-]*' ) || '.ex0' || REPLACE( REGEXP_SUBSTR( value, '(-ex\d+)+$' ), '-', '.' ) AS value
FROM test_data
Выход :
| VALUE |
| :------------------------- |
| example-dev5.ex0.ex1.ex2 |
| example1-dev10.ex0.ex3 |
| example2-dev99.ex0.ex2.ex7 |
db <> Fiddle здесь