1

我有一个带列的表

DETAIL         VARCHAR2(4000)  

存储在 DETAIL 列中的示例数据之一是

<![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 选择查询中提取文本?

4

3 回答 3

3

这是一种方法——尽管格式需要保持如上:

SELECT XMLTYPE(REPLACE(REPLACE(DETAIL,'<![CDATA[',''),']]>','')).EXTRACT('/DIV/SPAN/text()').GETSTRINGVAL() 
FROM yourtable

SQL 小提琴演示

基本上这会将详细信息列转换为 html(删除 cdata 信息),然后用于getstringval返回某些标签之间的值。

http://docs.oracle.com/cd/B12037_01/appdev.101/b10790/xdb04cre.htm#i1024803

于 2013-03-22T03:23:46.900 回答
2

通过 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;
于 2013-03-22T12:30:05.510 回答
0
regexp_substr(detail, '>([^<]+)<', 1, 1, '', 1)

小提琴- 感谢 sgeddes

于 2013-03-22T05:44:01.850 回答