Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
如何使用Oracle SQL从一个列值中查找多个字符串_Sql_Oracle_Regexp Substr - Fatal编程技术网

如何使用Oracle SQL从一个列值中查找多个字符串

如何使用Oracle SQL从一个列值中查找多个字符串,sql,oracle,regexp-substr,Sql,Oracle,Regexp Substr,下面是我的一个表中的CLOB列值。此值包含许多图像路径 <p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy2.jpg" style="height:67px; width:50px" /></p> <p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy%201.jpg" style="height:133px; width:

下面是我的一个表中的CLOB列值。此值包含许多图像路径

<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy2.jpg" style="height:67px; width:50px" /></p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy%201.jpg" style="height:133px; width:100px" />Please test this document</p>
<p>&nbsp;</p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Kenny.jpg" style="height:250px; width:200px" /></p>
<p>&nbsp;</p>
我的查询的输出是:

/library/NATIONWIDE/CCS_SUPPORT/Emmy2.jpg" style
你能指导我,如何获得所有的图像路径吗

多谢各位 kishore Kuna

Oracle REGEXP_SUBSTR返回字符串中的第一个匹配项。可以使用CONNECT BY子句递归分析字符串:

SELECT REGEXP_SUBSTR(x.xml, '/library/NATIONWIDE/.* style', 1, LEVEL) AS xml_substr
FROM ( 
    SELECT xml
    FROM contenttext 
    WHERE 
        contenttext.xml like '%img alt=%' 
        AND contenttext.documentid like 'SPT91%'
        AND contenttext.published = 'Y'
) x
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(x.xml, '/library/NATIONWIDE/.* style')) + 1;

此SQL不需要任何连接方式。通过使用“m”选项,regexp\u replace将每一行视为单独的字符串。我提供了两个参数,用竖条上的“或”分隔。第一个字符串是所需的字符串,第二个字符串是其他所有字符串

仅保留所需字符串“\1”,但额外的回车符仍然存在,因此周围的regexp\u replace将删除多个回车符

-- Just setting up a test dataset
WITH aset AS( SELECT '<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy2.jpg" 
style="height:67px; width:50px" /></p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy%201.jpg" 
style="height:133px; width:100px" />Please test this document</p>
<p>nbsp;</p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Kenny.jpg" style="height:250px; 
width:200px" /></p>
<p>nbsp;</p>' test FROM DUAL )
-- Magic starts here
SELECT test
     , regexp_replace( REGEXP_REPLACE( test
                                 , '(^.*/library/NATIONWIDE/.*$)|(.*$)'
                                 , '\1'
                                 , 1
                                 , 0
                                 , 'im' )
                 , CHR( 10 ) || '+'
                 , CHR( 10 ) )    one
  FROM aset
结果如下:

<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy2.jpg" style="height:67px; width:50px" /></p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy%201.jpg" style="height:133px; width:100px" />Please test this document</p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Kenny.jpg" style="height:250px; width:200px" /></p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy2.jpg" style="height:67px; width:50px" /></p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Emmy%201.jpg" style="height:133px; width:100px" />Please test this document</p>
<p><img alt="" src="/library/NATIONWIDE/CCS_SUPPORT/Kenny.jpg" style="height:250px; width:200px" /></p>