2017-07-26 49 views
0

我在CLOB類型的Oracle數據庫中有字段。我從這個CLOB文件中提取第一行。以下是內容的一個例子:從CLOB中提取特定行 - ORACLE

"<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> 

回答

0

如果你真的想第一個換行符之前的字符從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 

查看this瞭解更多信息。

+0

感謝@ jeff6times7但當CLOB僅有一行此查詢失敗。 –

+0

@GanzRicanz當你說「只有一行」時,你的意思是「只有一行」還是你的意思是當查詢返回多行時? – jeff6times7

+0

對不起,CLOB字段只包含一行時失敗。 –

0

我會做,使用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; 

乾杯

+0

如果我的答案使用'm'而不是'nm',那麼我可以讓你的表情起作用。 'n'允許點匹配換行符,使表達式匹配整個輸入。 – jeff6times7

+1

編輯回覆並刪除了'nm'的'n'frm,我把它從另一個案例中刪除了..嘗試像這樣 – g00dy