从CLOB列中提取某些行

时间:2019-01-24 14:07:02

标签: oracle11g clob

我有一个CLOB列,其中有这样的行:

[2019-01-24 11:57:05]: Serial.no is: 12330

[2019-01-24 11:57:05]: Buyers: 3

[2019-01-24 11:57:06]: Serial.no is: 23340

[2019-01-24 11:57:06]: Buyers: 6

现在,我想在该列上进行选择,并仅提取“ Serial.no”所在的行,例如:

[2019-01-24 11:57:05]: Serial.no is: 12330
[2019-01-24 11:57:06]: Serial.no is: 23340

我希望能找到一个简单的解决方案,因为我不太了解到目前为止所发现的一切,在此先感谢。

编辑:

这将返回我第一行:

select regexp_substr(My_CLOB, 'Serial.no.*',1) as clob_data from MyTable
WHERE id='1163753'; 

它返回CLOB数据类型的列,但是如果我可以检索所有行,那将不是问题。

1 个答案:

答案 0 :(得分:1)

这是一个使用connect by子句增加regexp索引的技巧。似乎可以工作

WITH test AS (
     SELECT
         '[2019-01-24 11:57:05]: Serial.no is: 12330
[2019-01-24 11:57:05]: Buyers: 3
[2019-01-24 11:57:06]: Serial.no is: 23340
[2019-01-24 11:57:06]: Buyers: 6'
         my_clob
     FROM
         dual
 )
 SELECT
     regexp_substr(my_clob,'Serial.no.*',1,level) AS clob_data
 FROM
     test
 CONNECT BY
     level <= regexp_count(my_clob,'Serial.no.*')