Как насчет этого? Я добавил еще одно значение в таблицу, которое не содержит строку «Причины удалены».
По сути, он выбирает все между «Причины добавлены» и «Причины удалены», если он существует; если нет, берет все от «Причины добавлено» до конца. CASE
позаботится об этом.
SQL> select * from test;
COL
----------------------------------------------------------------------------------------------
"Change step forward
Note added
Step changed from [OFF] to [ON]
Reasons added: test1 (Type), some test 2 (Type), test3 , sometest4& and5(Type)
Reasons removed: test6- test7(Type)"
"This is text without "Reas. remov."
Note added
Step changed from [OFF] to [ON]
Reasons added: test1 (Type), some test 2 (Type), test3 , and this would be the end"
SQL> select trim(substr(col,
2 instr(col, 'Reasons added') + 14,
3 --
4 case when instr(col, 'Reasons removed') > 0 then
5 instr(col, 'Reasons removed') - instr(col, 'Reasons added') - 14
6 else
7 length(col)
8 end)) result
9 from test;
RESULT
--------------------------------------------------------------------------------
test1 (Type), some test 2 (Type), test3 , sometest4& and5(Type)
test1 (Type), some test 2 (Type), test3 , and this would be the end"
SQL>