with test (col) as (
select '206579227 - Account - Account Status Enquiry - [OLUBUSOLA]' from dual union all
select '205389263 - Loans - Loan Liqidation - [HASSAN]' from dual union all
select '205389263 - - Loan Liqidation - [HASSAN]' from dual union all
select '205389263 - - - [HASSAN]' from dual union all
select '203202332 - E-channel - Loan account - [skhddk]' from dual union all
select '203202445 - channel - Loan account - [Modupe]' from dual
)
select
regexp_substr(col, '(.*?) - ', 1, 1, null, 1) acc,
regexp_substr(col, '(.*?) - ', 1, 2, null, 1) subj,
regexp_substr(col, '(.*?) - ', 1, 3, null, 1) issue,
regexp_substr(col, '\[(.+)\]\s*$', 1, 1, null, 1) name
from test
;
ACC SUBJ ISSUE NAME
-------------------- --------------- ------------------------- ---------------
206579227 Account Account Status Enquiry OLUBUSOLA
205389263 Loans Loan Liqidation HASSAN
205389263 Loan Liqidation HASSAN
205389263 HASSAN
203202332 E-channel Loan account skhddk
203202445 channel Loan account Modupe
6 rows selected.
Здесь разделителем является [пробел] [тире] [пробел].
для объяснения регулярных выражений:
https://regex101.com/r/ANmLWS/1
https://regex101.com/r/HU6hDr/1/