我有一个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数据类型的列,但是如果我可以检索所有行,那将不是问题。
答案 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.*')