SQL Server查询以匹配确切的单词

时间:2018-06-20 13:43:07

标签: sql sql-server sql-like exact-match

此查询返回以下内容:

select * 
from dbo.persons 
where LastName like '%Dan%';

结果:

enter image description here

如何只选择带有LastName = "Dan"的第一行而不选择“ Dant”或“ Dan12”?

我正在使用以下查询:

select * 
from dbo.persons 
where LastName like '%[^a-z]Dan[^a-z]%' 
   or LastName like 'Dan[^a-z]%' 
   or LastName like '%[^a-z]Dan'

返回以下内容:

LastName = Dan12
LastName = pine and Dan and apple

我只想要这些结果:

LastName = Dan
LastName = pine and Dan and apple

我尝试了以下查询,但未返回任何内容:

select * 
from dbo.persons 
where LastName like '%[^a-z][^0-9]Dan[^a-z][^0-9]%' 
   or LastName like 'Dan[^a-z][^0-9]%' 
   or LastName like '%[^a-z][^0-9]Dan'

5 个答案:

答案 0 :(得分:1)

简单

select * from dbo.persons where LastName ='Dan';

答案 1 :(得分:1)

下面两个语句都可以做您想要的事情:

select * from dbo.persons where LastName like 'Dan';

或:

select * from dbo.persons where LastName = 'Dan';

答案 2 :(得分:0)

我猜你不知道哪个是第一个,所以这行不通:

account baz@xmpp.foo.bar

相反,您选择按字母顺序排列的第一个顺序

where LastName = 'Dan'

答案 3 :(得分:0)

我使用了以下似乎有效的查询:

  select * from dbo.persons where LastName like '%[^a-z]Dan[^a-z]%' OR 
                                  LastName like 'Dan[^a-z0-9]%' OR 
                                  LastName like '%[^a-z]Dan' OR
                                  LastName like 'Dan';

这些是预期返回的行。

enter image description here

答案 4 :(得分:-1)

不是使用LIKE来通过使用通配符%来检查字符或一组字符的任何出现,而是使用=来获得所需的精确匹配。 如果在开头或结尾处都存在尾随空格,则将无法获得完全匹配的内容,因此请使用LTRIM()或RTRIM()来消除空格。

SELECT * FROM dbo.persons WHERE LastName = LTRIM(' Dan')

OR

 SELECT * FROM dbo.persons WHERE LastName = RTRIM('Dan ')
相关问题