我正在寻找虹吸存储在Oracle SQL数据库上CLOB中的一部分字符串。
示例:
<option id="862111" ncTypeId="338" ncPopup="true" ncLabel="{Q}: {A}" score="0" action="none" tooltip="This is an example tooltip string.">Red</option>
基本上,我只想保留工具提示元素所引用的字符串中包含的文本,结尾为:
这是示例工具提示字符串
请问如何实现?
答案 0 :(得分:1)
如果将XML存储为CLOB,则使用XML函数:
-- CTE for your sample value
with my_table (my_col) as (
select to_clob('<option id="862111" ncTypeId="338" ncPopup="true" ncLabel="{Q}: {A}" score="0" action="none" tooltip="This is an example tooltip string.">Red</option>')
from dual
)
-- actual query
select xmlquery('/option/@tooltip'
passing xmltype(my_col)
returning content)
.getStringVal() as tooltip
from my_table;
TOOLTIP
--------------------------------------------------------------------------------
This is an example tooltip string.
如果要使用substr / instr,则需要在引号内找到起始位置,并在引号中找到值的长度,这有点混乱(并且您需要处理该属性不存在于全部):
select substr(my_col, instr(my_col, 'tooltip="') + 9,
instr(substr(my_col, instr(my_col, 'tooltip="') + 9), '"') - 1) as tooltip
from my_table;
TOOLTIP
--------------------------------------------------------------------------------
This is an example tooltip string.
您还可以使用正则表达式:
select regexp_replace(my_col, '.*tooltip="(.*)".*', '\1') as tooltip
from my_table;
但是我想那不会做的那么好;但是您应该测试所有可用的方法,以查看哪种方法最适合您的数据。