用于查找字符串列表

时间:2016-12-02 02:06:40

标签: plsql

我是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)。* $')

但运气不好,它返回上述所有行,因为我无法否定那些有其他模式的行。 请指教

2 个答案:

答案 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”不应与[,; ]匹配。是因为它有不止一个匹配的模式吗?