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
这是一个仅使用标准 substr
和 instr
函数(无正则表达式)的解决方案:
select substr( remarks, instr(remarks, '"formula":"') + 11,
instr(substr(remarks, instr(remarks, '"formula":"') + 11), '"') - 1 )
from inputs;
这是我的 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
这是一个仅使用标准 substr
和 instr
函数(无正则表达式)的解决方案:
select substr( remarks, instr(remarks, '"formula":"') + 11,
instr(substr(remarks, instr(remarks, '"formula":"') + 11), '"') - 1 )
from inputs;