【发布时间】:2017-08-17 19:04:10
【问题描述】:
我正在 SQL Server 2014 (v12.0.5203) 中运行查询,但我注意到以下结果,这里是我的查询:
SELECT TOP (1000)
[CustomerID], [NameStyle], [Title],
[LastName], [Suffix], [CompanyName],
[SalesPerson], [EmailAddress], [ModifiedDate]
FROM
[AdventureWorksLT2012].[SalesLT].[Customer]
WHERE
NameStyle = 0
AND (([Suffix] IS NULL)
OR (MiddleName IS NOT NULL
AND ModifiedDate > '20030901'))
这样我只在[Suffix] IS NULL时得到结果,忽略了
OR
(MiddleName IS NOT NULL
AND ModifiedDate > '20030901'
但是如果我改变了
[Suffix] IS NULL by [Suffix] IS NOT NULL
它按预期工作,显示了两个结果,我还使用
将Suffix (varchar) 替换为 ModifiedDate (Datetime)
IS NULL AND IS NOT NULL,
它奏效了。我能够解决我的问题,分解查询,然后使用 UNION ALL 但不确定我是否在查询上做错了,或者 IS NULL 对于某些数据类型不能正常工作(不认为是) ,如果有人能解释为什么会发生这种情况,我将不胜感激。
谢谢
这两种方式都有效
【问题讨论】:
-
应该返回但不返回的行的示例是什么?
-
这是一个很好的起点。 spaghettidba.com/2015/04/24/…
-
最可能的解释是您的数据不是您认为的那样。我向你保证 IS NULL 按预期工作,它适用于所有数据类型。
-
我敢打赌 [Suffix] 是一个字符串,而你认为空字符串是一个空字符串,这实际上是完全不同的东西
-
如果没有样本数据和预期结果,我认为任何人都无法帮助您,我们无法猜测您需要什么或发生了什么,也无法假设您想要
OR或@ 987654332@
标签: sql sql-server tsql sql-server-2014 isnull