多行字符串中的Oracle where条件搜索

Oracle where condition search in a multiline string

我正在尝试 select 其 'Text' 字段匹配以下形式的记录:

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

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

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

这是查询,但 return 没有任何记录:

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

您使用 'i' 作为 REGEXP_LIKE 的第三个参数来进行搜索 case-insensitive。

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

对于此设置,普通的旧 LIKE 工作正常。你甚至不需要关心换行符。

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

会完成任务的。

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

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

对于 上下文定界符 搜索,例如全词搜索简单替换所有相关 white space 字符为空白:

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

这里我替换了new linetab,欢迎添加其他的,例如如果需要,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