从CLOB中提取特定行- ORACLE

jvlzgdj9  于 2023-05-06  发布在  Oracle
关注(0)|答案(2)|浏览(187)

我在Oracle数据库中有一个CLOB类型的字段。我从这个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>"

结果应该如下所示:

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

5ssjco0h1#

如果你真的想返回从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

查看此页面以获取更多信息。
编辑日期:2023年5月4日
如果一个CLOB只有一行,并且允许该行没有尾随的换行符,那么您必须编写代码来扫描整个CLOB以查找换行符,以便返回整个CLOB的字符。
如果将substr的第二个参数视为更复杂的表达式,则可以不考虑性能问题。如果你把它变成一个decode或者case语句,那么你可以让表达式返回它现在的样子,或者如果instr函数没有找到换行符,返回clob的大小。

af7jpaap

af7jpaap2#

我会使用REGEXP_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;

干杯

相关问题