在分号分隔列表中搜索SQL中的特定值

时间:2016-03-11 21:35:49

标签: sql netezza

我正在使用Netezza。我有一个存储如下数据的字段,以水果为例:

Fruits
----------------
APPLE; PEAR; ORANGE
PEAR
BANANA; LEMON; APPLE
APPLE; ORANGE

我想返回仅包含" Apple,"的组合的行。 "梨,"或"橙色。"因此,从上面的数据集中,我想要返回的行是:

Fruits
-----------------
APPLE; PEAR; ORANGE
PEAR
APPLE; ORANGE

原始表中的第三条记录不会被返回,因为即使它有“#34; Apple”这个词,"它还包含" Banana"和#34;柠檬,"而我只想要包含一个或多个" Apple的行," "梨,"或"橙色。"所有值都以分号分隔。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

你可以用替换来做到这一点。删除你不喜欢的字符串,确保没有留下任何东西:

select f.*
from fruits f
where replace(replace(replace(replace(replace(col, 'APPLE', ''), 'PEAR', ''), 'ORANGE', ''), ';', ''), ' ', '') = '';

答案 1 :(得分:1)

Netezza支持正则表达式,您可以删除所有这些关键字并检查结果是否为空:

WHERE REGEXP_REPLACE(col, '( ){0,1}(APPLE|PEAR|ORANGE);{0,1}', '', 1, 0, 'i') = ''

这将删除可选的前导空格&也是分号。

编辑:

另一个简化版本:

REGEXP_REPLACE(col, '(APPLE|PEAR|ORANGE|;|( ))', '', 1, 0, 'i')