首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle REGEXP_LIKE使用查找或忽略命令

Oracle REGEXP_LIKE使用查找或忽略命令
EN

Stack Overflow用户
提问于 2014-06-24 18:17:33
回答 1查看 461关注 0票数 0

我试图找到一个匹配与给定的搜索参数列表出现在给定的字符串中的任何位置。搜索参数可以是OR或和。替换的REGEXP_LIKE可以很好地工作,但不能用于和。以下是OR的一个示例:

select 'match' from dual WHERE REGEXP_LIKE('BCR081', REPLACE ('BCR;081', ';', '|'));

--工程

select 'match' from dual WHERE REGEXP_LIKE('BCR081', '(' || REPLACE ('BCR;081', ';', ').*?(') || ')');

select 'match' from dual WHERE REGEXP_LIKE('BCR081', '(' || REPLACE ('081;BCR', ';', ').*?(') || ')');

-我需要这个才行.

有什么东西相当于

代码语言:javascript
复制
select 'match' from dual WHERE REGEXP_LIKE('BCR081', REPLACE ('BCR;081', ';', '&'));

任何帮助都是非常感谢的。我试过了(向前看?):

代码语言:javascript
复制
select 'match' from dual WHERE REGEXP_LIKE('BCR081','(?=' || REPLACE ('081;BCR', ';', ')(?=') || ')');

注:上面的只是一个例子,我们可以有从1-20搜索参数的任何地方.也不能使用can子句,因为它会抛出太多的结果错误。

EN

回答 1

Stack Overflow用户

发布于 2014-06-24 18:50:34

我们可以通过生成行,逐个查找搜索字符串。

代码语言:javascript
复制
with my_data as
(
  select 'BCR081' as str , 'BCR;081' as pattern from dual
),
pattern_table as
(
  select str, regexp_substr(pattern,'[^;]+',1,level) as pattern
  from my_data
  connect by level <= regexp_count(pattern,';') + 1
)
SELECT DECODE(
               COUNT(DECODE(
                           INSTR(a.str,b.pattern),
                           0,
                           null,
                           1)
                    ),
                0,
               'no match',
               'match'
             ) as result
 FROM my_data a, pattern_table b
 WHERE a.str = b.str
 GROUP BY a.str;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24393595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档