查找一行是否以clob中的指定字符串开头,然后提取



我有一个CLOB列,我想搜索以"305"开头的行,然后从该行中提取一些内容,我的一些行将在整个单元格中的某个地方有多个以"305’或"305"开始的行,所以我只想找到以"305‘开头的第一行,整个单元格内容被拆分为类似的行

301|10500000908|
302|20171021|20171104|
303|00001|8306.7|
302|20171008|20171020|
303|00001|13174.5|
302|20170704|20171007|
303|00001|2508.7|
302|20170419|20170703|
303|00001|6962.9|
302|20170330|20170418|
303|00001|7628.2|
302|20170305|20170329|
--- my instr(dbms_lob.substr(flow_data, 4000, 1 ),'305|', 1, 1) keeps finding this line
303|00001|8489.1|
302|20170120|20170304|
303|00001|1997.9|
302|20161021|20170119|
303|00001|12359.8|
302|20160722|20161020|
303|00001|7354.0|
302|20160516|20160721|
303|00001|26.4|
304|20171105|
305|00001|5936.1|    

--- i want to find this line and then extract the '5936.1' from it
304|20171021|
305|00001|5710.4|
304|20171008|
305|00001|5163.1|
304|20170704|
304|20170419|
305|00001|7390.8|
304|20170330|
305|00001|7363.2|
304|20170305|
305|00001|7181.4|
304|20170120|
305|00001|9200.2|
304|20161021|
305|00001|4791.3|
305|00001|2877.5|
304|20160516|
305|00001|4116.9|
306|0393|20160511|
307|SUPP|20160511|
310|A|20160511|
311|E|20160516|

当我使用instr(dbms_lob.substr(flow_data, 4000, 1 ),'305|', 1, 1)时,它总是找错线路。顺便说一下,行与行之间没有空隙,我插入它们是为了保持文本的分隔。

感谢所有

Mac

如果我正确地跟随你,你可以使用regexp_substr():

select regexp_substr(flow_data, '^305|[^|]*|([^|]*)', 1, 1, 'm', 1) as val
from t

论点分解:

  • flow_data:要搜索的值(允许CLOBs(

  • '^305|[^|]*|([^|]*)':正则表达式。我们在一行的开头搜索305,并在CSV列表中捕获第三个值

  • 1:在源字符串的开头开始搜索

  • 1:返回第一个匹配

  • m-多行模式:^在每行的开头匹配

  • 1:返回匹配的第一个捕获部分

相关内容

  • 没有找到相关文章

最新更新