Oracle在多行字符串中搜索条件的地方

时间:2018-03-08 15:23:46

标签: regex oracle regexp-like

我正在尝试选择“文本”字段匹配以下格式的记录:

__<sql>__ xyz __</sql>__

其中__表示任何内容,而xyz表示我正在搜索的单词。

注意:字段'Text'是一个多行字符串。

这是查询,但它不会返回任何记录:

Select * from reports where regexp_like (text, '(.*)<sql>(.*)(^|\s)xyz(\s|$)(.*)</sql>(.*)', 'i');

2 个答案:

答案 0 :(得分:3)

您使用'i'作为REGEXP_LIKE的第三个参数,以使搜索不区分大小写。

将其更改为'in'。额外的n是REGEXP函数的另一个选项:它告诉正则表达式引擎允许.匹配chr(10)(换行符)。没有此选项的默认行为是.匹配换行符。

答案 1 :(得分:2)

对于此设置,普通的LIKE工作正常。你甚至不需要关心新的线条特征。

 where column1 LIKE '%<sql>%xyz%</sql>%'

将完成这项工作。

对于不区分大小写的搜索,请添加LOWER

 where LOWER(column1) LIKE '%<sql>%xyz%</sql>%'

对于上下文分隔符搜索,例如全字搜索简单地将所有相关的空格字符替换为空白

 where replace(replace(lower(column1),CHR(10),' '),CHR(9),' ') LIKE '%<sql>% xyz %</sql>%';

我在这里替换新行标签,随时添加其他内容,例如CHR(13)如果需要的话。

一般规则是 - 如果您可以LIKE使用REGEXP,则LIKE的效果会更好。

简单演示:

create   table MYTABLE(column1 varchar2(1000))
;

insert into MYTABLE(column1) values('bla bla <sql> bla'||chr(10)||' xyz bla </sql> bla');
insert into MYTABLE(column1) values('bla bla <sql> bla'||chr(10)||' NO MACTH bla </sql> bla');
commit;

select * from MYTABLE;

COLUMN1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
-------------------
bla bla <sql> bla                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 xyz bla </sql> bla                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

bla bla <sql> bla                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 NO MACTH bla </sql> bla

 select * from MYTABLE 
 where column1 LIKE '%<sql>%xyz%</sql>%';

 COLUMN1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
-------------------
bla bla <sql> bla                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 xyz bla </sql> bla