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分钟才能标记:(