暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如果在单个输入字段中具有 “喜欢” 和 “不喜欢” 的搜索条件,则正则表达式不起作用

askTom 2018-05-25
188

问题描述

嗨,汤姆,

需要你的帮助!

请找到LiveSQL链接

提前谢谢!

我有一个仅带有s_desc列的表st_exp,用户可以选择按s_desc条件进行搜索。

场景: 用户可以在同一单个输入字段中输入类似和不喜欢的文本critiria。

我使用REGEXP_LIKE从查询中搜索。

以下示例数据 :( 包含所有记录)

select * from test_exp

S_DESC
------
NOK D8StorePQRST
NOK 8.0.1 D81SupiriorCoachStorePUJI
NOK  D81CoachStorePUJI
NOK  D81TesterCoachStorePUJI
NOK  D81RacketPUJI
D81QACoachStorePUJI
NOK D81QAPatchPUJI
复制


场景1:
用户想要检索包含 “D8” 和 “存储” 的记录

查询1 :( 预期结果)
select s_desc from test_exp where REGEXP_LIKE(s_desc,'[D81]*(Store)')

S_DESC
-------
NOK D8StorePQRST
NOK 8.0.1 D81SupiriorCoachStorePUJI
NOK  D81CoachStorePUJI
NOK  D81TesterCoachStorePUJI
D81QACoachStorePUJI
复制


场景2:
用户想要检索包含 (如) 'd8' 和 'Store' 但不包含 (不像) 'Tester' 和 'QA' 的记录

查询2 :( 未预期结果)
select s_desc from test_exp where REGEXP_LIKE(s_desc,'[D81][^(Tester|QA)]*(Store)')

S_DESC
--------
NOK D8StorePQRST
NOK  D81CoachStorePUJI
复制


预期有3条记录,但结果仅显示2条记录。
但是查询未检索到值 “NOK 8.0.1 D81SupiriorCoachStorePUJI”。

定义:
[^] 用于指定一个不匹配的列表,您试图匹配除列表中的字符以外的任何字符。

请指导我以获得进一步的准确结果。

谢谢和问候
可汗
印度

专家解答

正则表达式没有做你认为它在做的...

[^(Tester|QA)]*
复制


表示匹配一个不在列表中的字符零次或多次。不是零个或多个精确字符串 “Tester” 或 “QA” 的实例。

类似地:

[D81]
复制


表示匹配D或8或1。

所以:

NOK 8.0.1 d81sufiriorCoachStorePUJI
复制


你有:

在第一个8 (第5个字符,在 “NOK 8” 的那个) 开始比赛。

然后匹配列表中没有的任何字符

(测试 | 质量保证)

这将使您达到:

8.0.1 d81sufi

“r” 在列表中。因此,正则表达式移动以查找下一个组,即字符串 “存储”。

"r" <> "商店" => 不匹配!

任何特定的原因,你需要正则表达式而不是标准 (不) 像?

select s_desc from test_exp 
where  s_desc like '%D8%Store%'
and    s_desc not like '%Tester%'
and    s_desc not like '%QA%';

S_DESC                                
NOK 8.0.1 d81sufiriorCoachStorePUJI   
NOK  D81CoachStorePUJI                
NOK D8StorePQRST  
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论