使用特定单词搜索表列

时间:2011-12-10 08:20:08

标签: sql-server search

我们说我有一个包含两列的表格:

ID, FullName

我在其中有以下记录:

John Bob Smith
John Bobby Smith

我的问题是:

我想只返回包含匹配单词&#34; Bob&#34;的行,并且我不想返回任何包含类似单词的行,例如&#34; Bobby&#34; < / p>

我使用时搜索:

Select * 
From Table1 
Where FullName like '%bob%'

我得到了两行错误。

Select * 
From Table1 
Where FullName = 'Bob'

这根本不会返回任何行。

Select * 
From Table1 
Where FullName like 'Bob'

这也不会返回任何行。

我尝试使用不同的通配符但没有任何效果,我也尝试了CHARINDEXPATINDEX,但它们也没有返回所需的结果。

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:7)

SELECT * 
FROM Table1 
WHERE FullName LIKE '%Bob%'
  AND FullName NOT LIKE '%Bobby%'

或许你的意思是避免任何BobbyBobban以及BobyBobbie等......:

SELECT * 
FROM Table1 
WHERE FullName = 'Bob'             --- just Bob
   OR FullName LIKE 'Bob %'        --- starts with Bob
   OR FullName LIKE '% Bob'        --- ends with Bob
   OR FullName LIKE '% Bob %'      --- middle name Bob

但是会遗漏'John Bob-George Smith''John Bob. Smith'等行。如果你想要这样的扩展功能,那么按照Albin的建议分割字符串的SQL函数是一种更好的方法。

答案 1 :(得分:1)

SQL Server中没有内置函数来比较整个单词。

如果您使用的是SQL Server,则可以创建CLR UDF to create a regex method或创建常规SQL function to split strings