Sql Oracle从CDATA中提取值
我有一张有圆柱的桌子Sql Oracle从CDATA中提取值,sql,oracle,Sql,Oracle,我有一张有圆柱的桌子 DETAIL VARCHAR2(4000) 存储在“详细信息”列中的示例数据之一是 <![CDATA[<DIV STYLE="text-align:LEFT;"><SPAN STYLE="letter-spacing:0px;color:#000000;font-size:10px;font-family:'Verdana';">Value to be extract</SPAN></DIV>]]&
DETAIL VARCHAR2(4000)
存储在“详细信息”列中的示例数据之一是
<![CDATA[<DIV STYLE="text-align:LEFT;"><SPAN STYLE="letter-spacing:0px;color:#000000;font-size:10px;font-family:'Verdana';">Value to be extract</SPAN></DIV>]]>
有没有一种方法可以提取SQL select查询中的文本?这里有一种方法可以做到这一点-尽管格式需要保持如上所述:
SELECT XMLTYPE(REPLACE(REPLACE(DETAIL,'<![CDATA[',''),']]>','')).EXTRACT('/DIV/SPAN/text()').GETSTRINGVAL()
FROM yourtable
基本上,这会将详细信息列转换为html,删除cdata信息,然后使用getstringval返回特定标记之间的值
这里有一种方法可以做到这一点——尽管格式需要保持如上所述:
SELECT XMLTYPE(REPLACE(REPLACE(DETAIL,'<![CDATA[',''),']]>','')).EXTRACT('/DIV/SPAN/text()').GETSTRINGVAL()
FROM yourtable
基本上,这会将详细信息列转换为html,删除cdata信息,然后使用getstringval返回特定标记之间的值
-多亏了斯盖德斯
-得益于SGEDES通过Oracle XML DB功能实现这些功能的正确方法:
select
value_test
from
XMLTable('$p'
passing XMLParse(content '<![CDATA[<DIV STYLE="text-align:LEFT;"><SPAN STYLE="letter-spacing:0px;color:#000000;font-size:10px;font-family:''Verdana'';">Value to be extract</SPAN></DIV>]]>')
as "p"
columns value_test varchar2(4000) path '/text()'
);
另一种做法是:
select
dbms_xmlgen.convert(
XMLQuery('data($p)'
passing by value XMLParse(content '<![CDATA[<DIV STYLE="text-align:LEFT;"><SPAN STYLE="letter-spacing:0px;color:#000000;font-size:10px;font-family:''Verdana'';">Value to be extract</SPAN></DIV>]]>')
as "p"
returning content
).getCLOBVal(),
1
)
from dual;
通过Oracle XML DB功能执行此类操作的正确方法:
select
value_test
from
XMLTable('$p'
passing XMLParse(content '<![CDATA[<DIV STYLE="text-align:LEFT;"><SPAN STYLE="letter-spacing:0px;color:#000000;font-size:10px;font-family:''Verdana'';">Value to be extract</SPAN></DIV>]]>')
as "p"
columns value_test varchar2(4000) path '/text()'
);
另一种做法是:
select
dbms_xmlgen.convert(
XMLQuery('data($p)'
passing by value XMLParse(content '<![CDATA[<DIV STYLE="text-align:LEFT;"><SPAN STYLE="letter-spacing:0px;color:#000000;font-size:10px;font-family:''Verdana'';">Value to be extract</SPAN></DIV>]]>')
as "p"
returning content
).getCLOBVal(),
1
)
from dual;
是否总是这种格式?样式html将存储在中。根据样式定义,是否始终使用该格式?样式html将存储在中。取决于定义的风格谢谢:它很好地处理动态值你知道我在哪里可以找到你的reg表达式的解释吗?@jjpan-和Egor必须来自外星行星,因为他在>[^@EgorSkriptunoff:我可以将事件设置为“ANY”,而不是硬编码事件的数量吗?谢谢:它处理动态值,你知道我在哪里可以找到你的reg表达式的解释吗?@jjpan-而且Egor必须来自外星行星,因为他在>[^@EgorSkriptunoff:我是否可以将事件设置为“ANY”,而不是硬编码事件数?