我如何 trim 内容以在 oracle 中获取所需的字符串

How do I trim content to get desired string in oracle

如何 trim 以 ' 结尾的值?

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

Air Bookings by Status Code

如何trim这个字符串? 我试过

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

我能够完成第一部分。后半部分怎么做?

您可以使用 regexp_substr:

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

如果您的版本没有正则表达式,您还可以使用 "pure" 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,我们必须再减1。

参见:http://sqlfiddle.com/#!4/32454a/10