我有一个包含文本字段的表(摘要)。我最近收到了一个查询该字段的请求,以查找任何长字符串列表。例如,我想在“摘要”字段中搜索这些字符串的任何次出现:
我可以写一个简单的查询,它会返回包含这些值的行的ID吗?
答案 0 :(得分:6)
你可以将它们放在一个巨大的正则表达式中:
select t.*
from t
where summary similar to '%((apple)|(banana)|(carrot)|(dog)| . . .|(zebra))%';
另一种选择,如果你想要更多的灵活性,更关心表演:
with tosearch as (
select '%apple%' as pattern union all
. . .
select '%zebra%'
)
select t.*
from t join
tosearch
on t.summary like tosearch.pattern;
答案 1 :(得分:5)
我脑海中最简单的方法是:
SELECT "ID" FROM table WHERE "summary" IN ('apple', 'banana', 'carrot', 'dog', ....)
试试这个。
评论后编辑:使用similar to运算符:
select "ID" from table where upper("summary") similar to upper('%((apple)|(banana)|...|(zebra))%')
答案 2 :(得分:2)
使用正则表达式:
select * from mytable
where summary similar to '%(apple|banana|carrot|dog)%'
请参阅此工作的SQLFiddle