我如何 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。
如何 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。