3

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

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

我可以编写一个简单的查询来返回包含任何这些值的行的 ID?

4

3 回答 3

10

你可以把它们放在一个巨大的正则表达式中:

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;
于 2013-09-17T13:50:47.343 回答
6

我想到的最简单的方法是这样的:

SELECT "ID" FROM table WHERE "summary" IN ('apple', 'banana', 'carrot', 'dog', ....)

试试这个。

评论后编辑:使用类似于运算符:

select "ID" from table where upper("summary") similar to upper('%((apple)|(banana)|...|(zebra))%')
于 2013-09-17T13:48:32.603 回答
3

使用正则表达式:

select * from mytable
where summary similar to '%(apple|banana|carrot|dog)%'

请参阅此工作的SQLFiddle

于 2013-09-17T14:00:07.917 回答