[英]Oracle SUBSTR XML Parse
表中的某些值具有不同的XML结构。
所有XML块中都存在一个标记<problemDesc> 'error' </problemDesc>
。
如何使用SubStr和InStr函数从标记中提取错误? 还是有任何获取价值的方法。
使用字符串函数解析XML不是一个好主意。 改用内置的XML解析功能:
select *
FROM
XMLTABLE('//problemDesc'
PASSING
xmltype('<problemDesc>error</problemDesc>')
COLUMNS
error varchar2 (200) PATH '.'
) xmlt
;
尽管我同意这是一个坏主意,但以您可能会这样的方式回答问题是可行的:
SELECT SUBSTR('<problemDesc>Error 1</problemDesc>',
INSTR('<problemDesc>Error 1</problemDesc>', '<problemDesc>') + LENGTH('<problemDesc>'),
INSTR('<problemDesc>Error 1</problemDesc>', '</problemDesc>') - (INSTR('<problemDesc>Error 1</problemDesc>', '<problemDesc>') + LENGTH('<problemDesc>')))
FROM DUAL;
换一种说法
SELECT SUBSTR(COL_NAME,
INSTR(COL_NAME, '<problemDesc>') + LENGTH('<problemDesc>'),
INSTR(COL_NAME, '</problemDesc>') - (INSTR(COL_NAME, '<problemDesc>') + LENGTH('<problemDesc>')))
FROM SOME_TABLE;
只要这些标记不出现多次,此方法就起作用。 但是,从理论上讲,您正在寻找START标记的开始,并且想要转到END标记的开始。
为什么要字符串操作? 尝试这个 :
SQL> select extractvalue(xmltype('<a>abhi</a>'),'//a/text()') from dual;
EXTRACTVALUE(XMLTYPE('<A>ABHI<
--------------------------------------------------------------------------------
abhi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.