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

mik*_*son 27 sql sql-server

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

它需要将空格,标点符号和字符串的开头/结尾作为单词边界进行说明.

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

编辑:

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

where DealTitle like '%[^a-zA-Z]pit[^a-zA-Z]%' 
Run Code Online (Sandbox Code Playgroud)

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

例如,DealTitle可能包含"绝望的坑"或"陷入困境"或"坑"或"坑".或"坑!" 或者只是"坑".

Ric*_*iwi 41

全文索引就是答案.

可怜的堂兄替代品是

'.' + column + '.' LIKE '%[^a-z]pit[^a-z]%'
Run Code Online (Sandbox Code Playgroud)

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

  • 好的,我已经在一个有 11,000 行的表上对其进行了测试,在两列中搜索了三个关键字。使用全文索引 CONTAINS((col1,col2), 'keyword1 AND keyword2 AND keyword3') 为 15 毫秒,而 LIKE 模式(具有三个 AND 和三个 OR)为 350 毫秒。所以使用全文索引大约快 25 倍。但是,考虑到 LIKE 执行全表扫描,它似乎仍然非常有效,因此在某些情况下这当然足够了 - 取决于用户量。 (2认同)
  • 关于“。”(点)字符的说明:[[^ az]`部分要求完全匹配单个字符。因此,空字符将不匹配。例如,OP的LIKE将与“ pit”,“ pit”或“ pit”不匹配。通过添加点,“ [^ az]”部分与这些点匹配。 (2认同)

小智 7

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

(' '+YOUR_FIELD_NAME+' ') like '% doc %'
Run Code Online (Sandbox Code Playgroud)

它比其他解决方案运行得更快更好。所以在你的情况下,它可以很好地与“绝望的深渊”或“坑你的智慧”或“一个坑”或“一个坑”配合使用。或者只是“pit”,但不适用于“pit!”。


小智 5

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

where DealTitle like '%[^a-z]pit[^a-z]%' OR 
  DealTitle like 'pit[^a-z]%' OR 
  DealTitle like '%[^a-z]pit'
Run Code Online (Sandbox Code Playgroud)

我希望它对你们有帮助!

  • 没有处理“坑”的完全平等 (2认同)