выберите SUBSTR (имя, INSTR (имя, 'из') + 5, INSTR (имя, 'b') - INSTR (имя, 'из') + 5) из ot.plan; все еще не работает
Вы пытаетесь вычесть одно число из другого, но как часть этого у вас есть дополнение. Вам нужно либо заключить вторую часть в скобки:
select SUBSTR(name,INSTR(name,'from')+5,INSTR(name,' b')-(INSTR(name,'from')+5)) from ot.plan;
SUBSTR(NAME,INSTR(NAME,'FROM')+5,INSTR(NAME,'B')-(INSTR(NAME,'FROM')+5)
-----------------------------------------------------------------------
zzz_temp
zzz_temp
или изменить плюс на минус:
select SUBSTR(name,INSTR(name,'from')+5,INSTR(name,' b')-INSTR(name,'from')-5) from ot.plan;
SUBSTR(NAME,INSTR(NAME,'FROM')+5,INSTR(NAME,'B')-INSTR(NAME,'FROM')-5)
-----------------------------------------------------------------------
zzz_temp
zzz_temp
Вы можете посмотреть на отдельные числа, чтобы понять, что он делает :
select
INSTR(name,'from') as start_from,
INSTR(name,'from')+5 as start_table,
INSTR(name,' b') as b,
INSTR(name,' b')-(INSTR(name,'from')+5) as length_a,
INSTR(name,' b')-INSTR(name,'from')-5 as length_b
from ot.plan;
START_FROM START_TABLE B LENGTH_A LENGTH_B
---------- ----------- ---------- ---------- ----------
17 22 30 8 8
17 22 30 8 8
Первые три - это позиции символов, которые вы ищете; длины - это две вариации вычитания, поэтому в целом показано, что вы ищете 8 символов, начиная с позиции 22.
Однако, учитывая хрупкость этого, как упомянуто в комментариях, вам, вероятно, лучше в любом случае с использованием регулярных выражений.