С SUBSTR
:
with strings as (
select 'MAXO_INSTR_INTERFACE' as string from dual
union all
select 'MAXIS_VENDOR_INTERFACE' from dual
union all
select 'MAXIMOS_EMPS_INTERFACE2' from dual
)
select substr(string,
instr(string, '_', 1, 1) + 1,
instr(string, '_', 1, 2) - instr(string, '_', 1, 1) - 1
) as substr from strings;
Возвращает:
SUBSTR
---------------------------------------------------------------------
INSTR
VENDOR
EMPS
Но решение с регулярным выражением легче понять.
Вопрос также имеет тег PL / SQL:
create or replace function f (p_str in varchar2) return varchar2 as
v_begin constant pls_integer := instr(p_str, '_', 1, 1) + 1;
v_len constant pls_integer := instr(p_str, '_', 1, 2) - v_begin;
begin
return substr(p_str, v_begin, v_len);
end;
Возвращает:
begin
dbms_output.put_line(f('MAXO_INSTR_INTERFACE'));
dbms_output.put_line(f('MAXIS_VENDOR_INTERFACE'));
dbms_output.put_line(f('MAXIMOS_EMPS_INTERFACE2'));
end;
/
INSTR
VENDOR
EMPS
PL/SQL procedure successfully completed.