在分号分隔的列表中搜索 SQL 中的特定值
Search a semicolon delimited list for specific values in SQL
我正在使用 Netezza。我有一个字段存储如下数据,以水果为例:
Fruits
----------------
APPLE; PEAR; ORANGE
PEAR
BANANA; LEMON; APPLE
APPLE; ORANGE
我想要 return 只包含 "Apple," "Pear," 或 "Orange." 组合的行所以从上面的数据集中,我想要的行 returned 是:
Fruits
-----------------
APPLE; PEAR; ORANGE
PEAR
APPLE; ORANGE
来自原始 table 的第三条记录没有被 return 编辑,因为即使它有单词 "Apple,",它也包含单词 "Banana" 和 "Lemon," 而我只想要包含一个或多个 "Apple," "Pear," 或 "Orange." 的行所有值都以分号分隔。有没有办法做到这一点?
你可以用替换来做到这一点。删除您不喜欢的字符串并确保没有留下任何内容:
select f.*
from fruits f
where replace(replace(replace(replace(replace(col, 'APPLE', ''), 'PEAR', ''), 'ORANGE', ''), ';', ''), ' ', '') = '';
Netezza 支持正则表达式,您可以删除所有这些关键字并检查结果是否为空:
WHERE REGEXP_REPLACE(col, '( ){0,1}(APPLE|PEAR|ORANGE);{0,1}', '', 1, 0, 'i') = ''
这也删除了可选的前导空白和尾随分号。
编辑:
另一个简化版本:
REGEXP_REPLACE(col, '(APPLE|PEAR|ORANGE|;|( ))', '', 1, 0, 'i')
我正在使用 Netezza。我有一个字段存储如下数据,以水果为例:
Fruits
----------------
APPLE; PEAR; ORANGE
PEAR
BANANA; LEMON; APPLE
APPLE; ORANGE
我想要 return 只包含 "Apple," "Pear," 或 "Orange." 组合的行所以从上面的数据集中,我想要的行 returned 是:
Fruits
-----------------
APPLE; PEAR; ORANGE
PEAR
APPLE; ORANGE
来自原始 table 的第三条记录没有被 return 编辑,因为即使它有单词 "Apple,",它也包含单词 "Banana" 和 "Lemon," 而我只想要包含一个或多个 "Apple," "Pear," 或 "Orange." 的行所有值都以分号分隔。有没有办法做到这一点?
你可以用替换来做到这一点。删除您不喜欢的字符串并确保没有留下任何内容:
select f.*
from fruits f
where replace(replace(replace(replace(replace(col, 'APPLE', ''), 'PEAR', ''), 'ORANGE', ''), ';', ''), ' ', '') = '';
Netezza 支持正则表达式,您可以删除所有这些关键字并检查结果是否为空:
WHERE REGEXP_REPLACE(col, '( ){0,1}(APPLE|PEAR|ORANGE);{0,1}', '', 1, 0, 'i') = ''
这也删除了可选的前导空白和尾随分号。
编辑:
另一个简化版本:
REGEXP_REPLACE(col, '(APPLE|PEAR|ORANGE|;|( ))', '', 1, 0, 'i')