Postgresql查询搜索文本字段中的多个字符串

时间:2013-09-17 13:41:01

标签: sql postgresql

我有一个包含文本字段的表(摘要)。我最近收到了一个查询该字段的请求,以查找任何长字符串列表。例如,我想在“摘要”字段中搜索这些字符串的任何次出现:

  • 苹果
  • 香蕉
  • 胡萝卜
  • elephant
  • ... x 50多个项目
  • 斑马

我可以写一个简单的查询,它会返回包含这些值的行的ID吗?

3 个答案:

答案 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