Oracle返回CLOB字符串的一部分

时间:2018-07-20 14:08:52

标签: sql regex oracle

我正在寻找虹吸存储在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>

基本上,我只想保留工具提示元素所引用的字符串中包含的文本,结尾为:

这是示例工具提示字符串

请问如何实现?

1 个答案:

答案 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.

详细了解the XMLQuery() function

如果要使用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;

但是我想那不会做的那么好;但是您应该测试所有可用的方法,以查看哪种方法最适合您的数据。