Зачем делать это простым, если мы можем сделать его сложным (для развлечения)?
SQL> with test (id, account) as
2 (select 1, '99k9220000709999' from dual union all
3 select 2, '002LF004828xx' from dual
4 ),
5 split as
6 (select id,
7 column_value lvl,
8 regexp_substr(account, '[^.]', 1, column_value) chr,
9 max(length(account)) over (order by null) len
10 from test cross join table(cast(multiset(select level from dual
11 connect by level <= length(account)
12 ) as sys.odcinumberlist))
13 )
14 select id,
15 listagg(chr, '') within group (order by lvl) result
16 from split
17 where lvl between 4 and len - 5
18 group by id;
ID RESULT
---------- --------------------
1 92200007
2 LF004828
SQL>