Одним из вариантов будет применение сначала regexp_replace()
в качестве шаблона, который ищет цифры, чтобы видеть названия стран в качестве третьих слов, и regexp_substr()
для извлечения только этих.
with cte as
(
select 'TEST DATA - SCOTLAND 1A' as str from dual union all
select 'TEST DATA - ENGLAND 6A' from dual union all
select 'TEST DATA - WALES 3A' from dual union all
select 'TEST DATA - IRELAND 2A' from dual
)
select regexp_substr(
regexp_replace(str, '-(.*)\d.*', '\1' )
, '[^ ]+', 1 , 3 )
as "Country",
trim(regexp_substr( str, '[^-]+(\s)', 1 , 2 ))
as "Country2"
from cte;
Country Country2
-------- --------
SCOTLAND SCOTLAND
ENGLAND ENGLAND
WALES WALES
IRELAND IRELAND
Демо
P.S. «column2» может быть более разумной альтернативой без необходимости использования функции regexp_replace()
.