substr:如何排除特殊字符,如 } " _ 等

substr: how to exclude special characters like } " _ etc

这是我的 table

REMARKS 栏中的消息
{"StatusCode":"0","StatusDescription":"","message":"","transactionid":"404897688","enddate":"04/03/2017","formula":"ACCESS"}_SUBS
{"StatusCode":"0","StatusDescription":"","message":"","transactionid":"404894098","enddate":"04/03/2017","formula":"EVASION"}_SUBN
{"StatusCode":"0","StatusDescription":"","message":"","transactionid":"404889188","enddate":"05/03/2017","formula":"LES CHAINES CANAL+"}_SUBS
{"StatusCode":"0","StatusDescription":"","message":"","transactionid":"404880515","enddate":"06/03/2017","formula":"EVASION+"}_SUBS

我在查询中使用它

substr(remarks, (instr(remarks,'formula') + 10), 18) FORMULA

但我也得到了特殊字符 }" _ 因为 EVASION+ LES CHAINES CANAL+ EVASION ACCESS 的长度不同。

谁能解释一下如何排除那些特殊字符并只获取 FORMULA 列下显示的名称。

谢谢

如果备注栏只是一个字符串,你可以试试:

with x as (
select '{"StatusCode":"0","StatusDescription":"","message":"","transactionid":"404897688","enddate":"04/03/2017","formula":"ACCESS"}_SUBS' as remarks
from dual
)
select
regexp_substr(remarks, '"formula":"(.*?)"',1,1,'i',1)
from x;

输出:

ACCESS

这是一个仅使用标准 substrinstr 函数(无正则表达式)的解决方案:

select substr( remarks, instr(remarks, '"formula":"') + 11,
               instr(substr(remarks, instr(remarks, '"formula":"') + 11), '"') - 1 )
from   inputs;