2013-03-22 117 views
1

获取价值我有一个表列甲骨文从CDATA

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选择查询?

+0

它总是那种格式? – sgeddes 2013-03-22 03:15:20

+0

样式html将存储在<![CDATA []]>中。根据定义的样式 – 2013-03-22 03:26:48

回答

1
regexp_substr(detail, '>([^<]+)<', 1, 1, '', 1) 

fiddle - 感谢sgeddes

+0

谢谢:)它处理动态值的好处 – 2013-03-22 06:39:06

+0

你知道我在哪里可以找到reg表达式的解释吗? – 2013-03-22 08:03:55

+1

@jjpan - [Here](http://docs.oracle.com/cd/E14072_01/server.112/e10592/functions148.htm)和[here](http://docs.oracle.com/cd/E14072_01 /server.112/e10592/ap_posix001.htm#i690819) – 2013-03-22 08:09:27

1

有道通过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;