Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle从CDATA中提取值_Sql_Oracle - Fatal编程技术网

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”,而不是硬编码事件数?