SQL Server 2008多个“LIKE”问题

时间:2010-08-31 20:14:38

标签: sql sql-server tsql sql-server-2008 full-text-search

我正在使用MS SQL 2008,现在我正面临着挑战。 我的SP参数可以包含一个字符串中的一到三个单词(nvarchar),我必须为字符串中的每个单词返回匹配的LIKE %phrase%个记录。

实施例。我的参数是:

"stack overflow"

必须返回的记录:

miSTACKon
noOVERFLOWon
STACKit
poOWERFLOW
STACK
OWERFLOW

我也考虑过FTS,但CONTAINS函数在(每个)短语的末尾只有一个通配符

phrase*

除了动态SQL之外,是否有解决此问题的方法?

2 个答案:

答案 0 :(得分:6)

从通用示例开始,然后我将使用一些“union alls”

来模拟它
   select distinct Record from dbo.Records
     inner join dbo.Split('stack overflow', ' ') tokens 
       on records_table.Record like '%' + tokens.value + '%'

所以我在下面做的是我模拟了一些数据,这些数据是“记录,以及来自dbo.Split函数的模拟返回,基本上是一个varchars表,'stack'和'overflow'标记为''。

select distinct Name from (
 select 'stack' as Name
 union all
 select 'nope' as Name
 union all
 select ' stackoverflow' as Name
   ) records_table 
   inner join (
   select 'stack' as value
     union all
    select 'overflow' as value) tokens 
    on records_table.Name like '%' + tokens.value + '%'

结果:

stack
stackoverflow

dbo.Split功能没什么特别之处,有很多实现例子......

答案 1 :(得分:0)

你可以传递带有固定分隔符(即',','|'等)的'words',这些字符对于任何可能的'words'(你支持的)都不是必需的,然后解析具有表值函数的该参数,最后加入具有类似于LIKE '%' + word + '%'的JOIN条件的单词集。