Вы можете использовать REGEXP_REPLACE()
для захвата части строки перед скобками в группе и части после группы, а затем вернуть только эти группы. Убедитесь, что вы используете хороший набор тестовых данных, включая значения, которые вы не ожидаете.
with down_time(id, down_notes) as (
select 1, '1 hour scheduled downtime (dball, 01/04/2019 09:14)' from dual union all
select 2, '2 hour scheduled downtime (dball, 01/05/2019 09:14) with more text after' from dual union all
select 3, '' from dual union all
select 4, '(dball, 01/04/2019 09:14)' from dual union all
select 5, '5 hour scheduled downtime' from dual
)
select id, trim(regexp_replace(down_notes, '^(.*?)\s*\(.*\)\s*(.*?)$', '\1 \2')) down_notes
from down_time;
Имейте в виду, что если REGEXP_REPLACE()
не найдет совпадения, будет возвращена переданная строка. Это отличается от REGEXP_SUBSTR()
, где он возвращает NULL, если не может найти совпадение. Возможно, вам придется учесть это в возвращаемых значениях.