从CLOB-ORACLE中提取特定行

从CLOB-ORACLE中提取特定行,oracle,Oracle,我在类型为CLOB的Oracle数据库中有一个字段。我从这个CLOB文件中提取第一行。以下是内容示例: "<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p> <p><b>PRO</b></p><ul>

我在类型为CLOB的Oracle数据库中有一个字段。我从这个CLOB文件中提取第一行。以下是内容示例:

"<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p>
<p><b>PRO</b></p><ul>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li></li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
</ul>
<p><b>PRP</b></p><ul>
<li>100%</li>
<li>DRY</li>
</ul>
<p>ABCDEF:PmId12345RmLn1VlId0</p>
</div></div>"
“FIT

核心印地-压缩

专业人士
  • ABCDEF:PmId12345RmLn1VlId0
  • ABCDEF:PmId12345RmLn1VlId0
  • ABCDEF:PmId12345RmLn1VlId0
  • ABCDEF:PmId12345RmLn1VlId0
  • PRP

    • 100%
    • 干的
    ABCDEF:PmId12345RmLn1VlId0

    "
    结果应该如下所示:

    "<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p>
    
    “FIT

    核心印地-压缩


    如果您确实希望将clob值开头的字符返回到第一个换行符(chr 10)之前的字符,那么下面是一个示例:

    create table tab1 (c1 clob);
    insert into tab1 values ('line 1' || chr(10) || 'line 2');
    select dbms_lob.substr(c1, dbms_lob.instr(c1, chr(10))-1, 1) from tab1;
    
    DBMS_LOB.SUBSTR(C1,DBMS_LOB.INSTR(C1,CHR(10))-1,1)
    ------------------------------------------------------------------------------
    line 1
    

    查看更多信息。

    我会使用
    REGEXP\u SUBSTR
    这样做:

    select
    REGEXP_SUBSTR(
     '<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p>
    <p><b>PRO</b></p><ul>'
    , '^.*$', 1, 1, 'm')
    from dual;
    
    选择
    REGEXP\u SUBSTR(
    '适合

    核心印地-压缩

    专业的 ,“^.*$”,1,1,'m') 来自双重;

    干杯

    如果我像你的答案那样使用“m”而不是“nm”,我可以让你的表达式工作。“n”允许点匹配换行符,从而使表达式匹配整个输入。编辑了响应并删除了“n”frm“nm”,我将它从另一个案例中保留下来。像soThanks@jeff6times7那样尝试,但此查询失败当CLOB只有一行时。@GanzRicanz当您说“只有一行”时,您是指“只有一行”还是指查询返回多行时?对不起,当CLOB字段只包含一行时,它将失败。