我们说我有一个包含两列的表格:
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'
这也不会返回任何行。
我尝试使用不同的通配符但没有任何效果,我也尝试了CHARINDEX
和PATINDEX
,但它们也没有返回所需的结果。
有什么建议吗?
感谢。
答案 0 :(得分:7)
SELECT *
FROM Table1
WHERE FullName LIKE '%Bob%'
AND FullName NOT LIKE '%Bobby%'
或许你的意思是避免任何Bobby
和Bobban
以及Boby
和Bobbie
等......:
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。