使用SQL Server LIKE模式搜索“全字匹配”

时间:2011-03-26 18:22:31

标签: sql sql-server

是否有人的LIKE模式只匹配整个单词?

它需要将空格,标点符号和字符串的开头/结尾视为字边界。

我没有使用SQL全文搜索,因为它不可用。当LIKE应该能够做到这一点时,我认为没有必要进行简单的关键字搜索。但是,如果有人测试了针对LIKE模式的全文搜索的性能,我将有兴趣听到。

编辑:

我得到了这个阶段,但它不匹配字符串的开头/结尾作为单词边界。

where DealTitle like '%[^a-zA-Z]pit[^a-zA-Z]%' 

我希望这匹配“坑”而不是“吐”在一个句子中或作为一个单词。

E.g。 DealTitle可能包含“绝望的坑”或“陷入困境”或“坑”或“坑”。或“坑!”或者只是“坑”。

9 个答案:

答案 0 :(得分:41)

全文索引就是答案。

可怜的堂兄替代品是

'.' + column + '.' LIKE '%[^a-z]pit[^a-z]%'

仅供参考,除非您使用_CS整理,否则不需要a-zA-Z

答案 1 :(得分:4)

我认为推荐的模式不包括在开头或结尾没有任何字符的单词。我会使用以下附加标准。

where DealTitle like '%[^a-z]pit[^a-z]%' OR 
  DealTitle like 'pit[^a-z]%' OR 
  DealTitle like '%[^a-z]pit'

我希望它可以帮助你们!

答案 2 :(得分:2)

另一个简单的选择:

WHERE DealTitle like '%[^a-z]pit[^a-z]%' OR 
      DealTitle like '[^a-z]pit[^a-z]%' OR 
      DealTitle like '%[^a-z]pit[^a-z]'

答案 3 :(得分:2)

您可以将以下条件用作空格分隔符:

(' '+YOUR_FIELD_NAME+' ') like '% doc %'

它比其他解决方案更快,更好地工作。因此,在您的情况下,它可以与“绝望的深渊”或“智慧尽头”或“深渊”或“深渊”一起使用。或只是“坑”,但不适用于“坑!”。

答案 4 :(得分:1)

这是一个很好的主题,我想补充一下,如果需要在某些字符串中找到一些单词,并将其作为查询元素传递。

SELECT 
    ST.WORD, ND.TEXT_STRING
FROM 
    [ST_TABLE] ST
LEFT JOIN 
    [ND_TABLE] ND ON ND.TEXT_STRING LIKE '%[^a-z]' + ST.WORD + '[^a-z]%'
WHERE 
    ST.WORD = 'STACK_OVERFLOW' -- OPTIONAL

使用此功能,您可以列出ST.WORDND.TEXT_STRING的所有事件,您可以使用WHERE clausule使用某些字词对其进行过滤。

答案 5 :(得分:1)

用空格将字符串括起来,然后创建一个测试列,如下所示:

 SELECT t.DealTitle 
 FROM yourtable t
 CROSS APPLY (SELECT testDeal = ' ' + ISNULL(t.DealTitle,'') + ' ') fx1
 WHERE fx1.testDeal LIKE '%[^a-z]pit[^a-z]%'

答案 6 :(得分:1)

如果您可以在SQL查询中使用regexp运算符。

用于查找空格,标点符号和字符串的开始/结尾作为单词边界的任何组合:

where DealTitle regexp '(^|[[:punct:]]|[[:space:]])pit([[:space:]]|[[:punct:]]|$)'

答案 7 :(得分:0)

您可以在SQL中搜索整个字符串:

select * from YourTable where col1 like '%TheWord%'

然后你可以过滤返回的行客户端站点,添加一个必须是整个单词的额外条件。例如,如果它与正则表达式匹配:

\bTheWord\b

另一种选择是使用SQL Server 2005及更高版本中提供的CLR功能。这将允许您搜索正则表达式服务器端。此MSDN artcile详细说明了如何设置dbo.RegexMatch功能。

答案 8 :(得分:0)

尝试使用charindex查找匹配项:

Select * 
from table 
where charindex( 'Whole word to be searched', columnname) > 0