首页 > 解决方案 > 使用 regexp_like 在 dba_source 中搜索文本

问题描述

我需要搜索介于 'FROM' 和 'WHERE' 之间的每个文本dba_source,我不知道我需要在 regexp_like 中使用什么模式才能获得预期的结果。

这根本不起作用:

select * from dba_source v
where regexp_like (upper(v.text), '(FROM)+\w+(WHERE)'); 

任何想法我做错了什么?

一些例子:

在 dba_source.text 中:

'FROM someschema.table WHERE[...]'
'FROM someschema2.table2, someschema3.table3 WHERE[...]'
'FROM someschema4.table4 WHERE[...]'

我只想得到结果:

'someschema.table'
'someschema2.table2, someschema3.table3'
'someschema4.table4'

标签: sqloracle

解决方案


您的正则表达式没有意义,它需要一个类似的字符串FROM(a word)WHERE,中间没有任何空格;此外,它区分大小写。

此外,regexp_like仅检查值是否与正则表达式匹配,而我知道您正在寻找实际从值中提取数据。因此,您应该regexp_substr改用。

无论情况如何,这都会提取FROM和之间的值。WHERE

SELECT 
    REGEXP_SUBSTR(v.text, 'FROM(.*)WHERE',1 ,1 ,'i', 1) 
FROM dba_source v

推荐阅读