Sql 如何在oracle中修剪内容以获得所需的字符串

Sql 如何在oracle中修剪内容以获得所需的字符串,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,如何修剪以结尾的值 示例:我有超过10万行的列报告名,如report[@name='Air Bookings by Status Code'] 实际报告名称仅为 按状态代码的机票预订 我怎样修剪这根绳子? 我试过了 substr(a.COGIPF_REPORTNAME,INSTR(a.COGIPF_REPORTNAME,'=',1,1)+2,INSTR(a.COGIPF_REPORTNAME,']')-2) 我能把第一部分绊倒。我怎么做后面的部分 您可以使用regexp\u substr: re

如何修剪以
结尾的值

示例:我有超过10万行的列报告名,如report[@name='Air Bookings by Status Code'] 实际报告名称仅为

按状态代码的机票预订

我怎样修剪这根绳子? 我试过了

substr(a.COGIPF_REPORTNAME,INSTR(a.COGIPF_REPORTNAME,'=',1,1)+2,INSTR(a.COGIPF_REPORTNAME,']')-2)


我能把第一部分绊倒。我怎么做后面的部分

您可以使用regexp\u substr:

regexp_substr(a.COGIPF_REPORTNAME,q'<'([^']*)'>',1,1,null,1)

regexp\u substr(a.COGIPF\u REPORTNAME,q'如果您有一个没有regex的版本,您也可以使用“纯”SQL函数:

SUBSTR(a.COGIPF_REPORTNAME,
       INSTR(a.COGIPF_REPORTNAME, '=') + 2,
       LENGTH(a.COGIPF_REPORTNAME) - INSTR(a.COGIPF_REPORTNAME, '=') - 3)
请注意,
SUBSTRING
的第二个参数是所需子字符串的长度

如果已知文本始终以
“']”“
结尾,则此方法有效。否则,您必须以不同方式计算长度:

SUBSTR(a.COGIPF_REPORTNAME,
       INSTR(a.COGIPF_REPORTNAME, '=') + 2,
       INSTR(a.COGIPF_REPORTNAME, ']') - INSTR(a.COGIPF_REPORTNAME, '=') - 3)
为什么要减去3?好吧,我们必须为两个单引号减去2,但即使文本是空的,最后一个单引号的位置也会比第一个单引号的位置多一个。因为一个空文本的长度为0,我们必须再减去一个


请参阅:

页面上说我必须等待5分钟才能标记:(