我是regex的新手,我需要以下内容 一个SQL查询,用于提取带有列的行,以匹配任何或所有4个字符串,但超出这4个字符串
例如
row1字段有:abc,def,ghi,xyz
row2字段有:abc,ghi,xyz
row3字段有:ghi; abc,
row4字段有:poi; IOP
让我们说我们需要所有价值“xyz”和/或“abc”和/或“ghi”
它应该只返回row2和row3
我试过了 select * from emp where REGEX_LIKE(empname,'。*(abc | ghi | xyz)。* $')
但运气不好,它返回上述所有行,因为我无法否定那些有其他模式的行。 请指教
答案 0 :(得分:0)
尝试以下方法:
select * from emp where REGEXP_LIKE(empname, '^[(abc|ghi|xyz) ,;]+$');
答案 1 :(得分:0)
month 2015 2016
1 13 65
2 22 67
3 30 69
4 37 74
5 43 84
6 49 91
7 52 91
8 60 96
9 60 102
怎么样,如:
(\A|\W)(abc|ghi|xyz)(\Z|\W)
我使用with demo as
( select 'abc, def, ghi, xyz' as csv from dual union all
select 'abc, ghi, xyz' from dual union all
select 'ghi; abc,' from dual union all
select 'poi; iop' from dual )
select csv
, case
when regexp_like(csv,'(\A|\W)(abc|ghi|xyz)(\Z|\W)')
then 'Y'
end as matched
from demo;
(任何非字符)作为分隔符。如果您只想要样本中的分隔符,则可以更具体并使用\W
。
编辑:只是重新阅读你的问题并注意到你说它应该只匹配第2行和第3行,但我的模式也匹配第1行。我必须遗漏一些因为我不确定为什么< em> all值为“xyz”和/或“abc”和/或“ghi”不应与[,; ]
匹配。是因为它有不止一个匹配的模式吗?