是否有人的LIKE
模式只匹配整个单词?
它需要将空格,标点符号和字符串的开头/结尾视为字边界。
我没有使用SQL全文搜索,因为它不可用。当LIKE
应该能够做到这一点时,我认为没有必要进行简单的关键字搜索。但是,如果有人测试了针对LIKE
模式的全文搜索的性能,我将有兴趣听到。
我得到了这个阶段,但它不匹配字符串的开头/结尾作为单词边界。
where DealTitle like '%[^a-zA-Z]pit[^a-zA-Z]%'
我希望这匹配“坑”而不是“吐”在一个句子中或作为一个单词。
E.g。 DealTitle
可能包含“绝望的坑”或“陷入困境”或“坑”或“坑”。或“坑!”或者只是“坑”。
答案 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.WORD
中ND.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