我试图找到一个匹配与给定的搜索参数列表出现在给定的字符串中的任何位置。搜索参数可以是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', ';', ').*?(') || ')');
-我需要这个才行.
有什么东西相当于
select 'match' from dual WHERE REGEXP_LIKE('BCR081', REPLACE ('BCR;081', ';', '&'));任何帮助都是非常感谢的。我试过了(向前看?):
select 'match' from dual WHERE REGEXP_LIKE('BCR081','(?=' || REPLACE ('081;BCR', ';', ')(?=') || ')');注:上面的只是一个例子,我们可以有从1-20搜索参数的任何地方.也不能使用can子句,因为它会抛出太多的结果错误。
发布于 2014-06-24 18:50:34
我们可以通过生成行,逐个查找搜索字符串。
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;https://stackoverflow.com/questions/24393595
复制相似问题