У меня есть два столбца A, B в оракуле, где значение A имеет такие значения, как xx-target-xx xx любые данные, но цель существует
A
--------
xx-target-xx
xx-target
мне нужно вернуть только "цель" из текста я устал от этого
select TRIM(substr(A, 0, instr(A, '-') - 1)) from mytable
но результат возвращает xx
не target
Используйте REGEXP_SUBSTR
. Вам нужна вторая строка любых символов, кроме знака минус:
select a, regexp_substr(a, '[^-]+', 1, 2) from mytable;
Использование вместо них INSTR
и SUBSTR
немного сложнее, но, конечно, возможно:
select a, substr(a,
instr(a, '-') + 1,
instr(a || '-', '-', 1, 2) - instr(a, '-') - 1
) as value
from mytable;
Демо: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=e75b878bbd6300e9207cd698bb3029ec