SQL IN语句使用类似语法?

时间:2010-03-30 21:30:34

标签: sql sql-server tsql

我想做这样的事情,即在in子句中使用外卡字符:

SELECT * FROM mytable WHERE keywords IN ('%test%', '%testing%')

SQL Server不支持这种方法....是否有其他方法可以实现它...

寻找以下内容:

SELECT * FROM mytable WHERE keywords like '%test%' or keywords like '%testing%' or.....

4 个答案:

答案 0 :(得分:8)

不,只有我能想到的另一种方法是加入临时表,但是你必须消除重复的行。

这对你的查询非常低效,因为它将无条件地进行表扫描。也许您应该考虑分离关键字或引入全文索引。

如果您想查看全文搜索,那么当您评估Sql Server全文解决方案时,我建议您查看一些重量级的重量,如sphinx或lucene。

答案 1 :(得分:3)

SELECT DISTINCT *
FROM
  mytable M
  JOIN
  (
  SELECT '%test%' AS pattern
  UNION ALL SELECT '%testing%'
  ...
  ) foo ON M.keywords LIKE foo.Pattern

也可以是CTE或临时表

答案 2 :(得分:2)

  

MS SQL不支持....是   有其他方法可以实现吗?

是的,Full Text Search.至少for prefix wildcards

答案 3 :(得分:0)

您可以使用正则表达式来执行此操作。 在一个正则表达式中,您可以在一个表达式中定义任意数量的模式。

在MS SQL SERVER中有很多关于正则表达式匹配的文章。 我在 MySQL 中使用 RLIKE 进行正则表达式匹配。

我还附上link1& link2用于MS SQL SERVER正则表达式匹配。