Вы можете отчасти повторить decode
, используя instr
и substr
. Пример ниже (который, вероятно, может быть значительно убран, но работает):
select DTXT
,Nvl(
Substr(
DTXT
,Instr(DTXT, SEARCHTXT || VALMTCH)
+ Length(SEARCHTXT || VALMTCH)
, Instr(DTXT, VALSEP, Instr(DTXT, SEARCHTXT || VALMTCH))
- Instr(DTXT, SEARCHTXT || VALMTCH)
- Length(SEARCHTXT || VALMTCH))
,CASEOTHER)
as TXTMATCH
from (select '0=BLACK;1=GREEN;2=YELLOW;' as DTXT
,'1' as SEARCHTXT
,';' as VALSEP
,'=' as VALMTCH
,'OTHER' as CASEOTHER
from Dual)
Вам нужно иметь точку с запятой (VALSEP) в конце текста, чтобы убедиться, что вы можете найти последнее значение (хотя можно обойти это, если я рассмотрю его дальше).