我正在使用Netezza。我有一个存储如下数据的字段,以水果为例:
Fruits
----------------
APPLE; PEAR; ORANGE
PEAR
BANANA; LEMON; APPLE
APPLE; ORANGE
我想返回仅包含" Apple,"的组合的行。 "梨,"或"橙色。"因此,从上面的数据集中,我想要返回的行是:
Fruits
-----------------
APPLE; PEAR; ORANGE
PEAR
APPLE; ORANGE
原始表中的第三条记录不会被返回,因为即使它有“#34; Apple”这个词,"它还包含" Banana"和#34;柠檬,"而我只想要包含一个或多个" Apple的行," "梨,"或"橙色。"所有值都以分号分隔。有没有办法做到这一点?
答案 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')