OR显示结果,AND不显示

时间:2014-06-05 11:27:13

标签: sql sql-server tsql

我有以下问题,一个简单的表

PERSON

FNAME  LNAME  AGE
-----------------
John   Carl   22
Rupert Luis   24

如果我执行以下T-SQL查询:

Select * 
from PERSON 
WHERE FNAME = 'John' AND LNAME = 'Carl'

它没有显示任何结果......如果我放置OR而不是AND它对我来说没有任何意义,但它可能是正确的,我只是想明白为什么会这样?

2 个答案:

答案 0 :(得分:5)

您显示数据的方式,在姓氏的开头有一个空格。我不知道原始数据中是否属实,但在查询中确实如此。

然后字符串'CARL'' CARL'不一样。您可以进行比较:

where ltrim(rtrim(firstname)) = 'John' and ltrim(rtrim(lastname)) = 'Carl'

或者您可以修复数据:

update person
    set lastname = ltrim(rtrim(lastname));

或者,可能存在另一个类似问题,通常由以下原因引起:

  • 字符串中不打印的隐藏字符(通常在开头或结尾)。
  • 看起来相似但不同的字符,例如零和大写字母。

答案 1 :(得分:1)

你没有对AND OR做错事 当数据出现时,AND应该返回数据

您最有可能的是看似相同但不是

的数据

这样做可以找出哪个缺失

Select *  
from PERSON  
WHERE FNAME = 'John'

Select * 
from PERSON 
WHERE LNAME = 'Carl'

在没有返回任何内容的情况下尝试

Select * 
from PERSON 
WHERE LNAME like '%Carl%'