将int值与null进行比较将返回零记录

时间:2014-04-01 20:35:57

标签: sql sql-server tsql

我有这个查询

Declare @value int
Select 21 where 1 <> @value

我得到0结果。

这怎么可能是合理的。 1不能等于null !!!

3 个答案:

答案 0 :(得分:2)

必须按以下方式处理NULL,

等于null:

Column IS NULL

不等于null:

Column IS NOT NULL

或者:

ISNULL(Column,-1) = -1  
ISNULL(Column,-1) <> -1

答案 1 :(得分:1)

NULL是未知的标记,它不是值 - 意味着它可以包含1,因此您的查询返回0记录。以下查询将返回记录。

select 21 where 1 is not null

答案 2 :(得分:0)

你应该考虑ANSI_NULL,根据它的设置方式,你会得到不同的结果。

当ANSI_NULLS设置为ON时

SET ANSI_NULLS ON
GO

IF (NULL=NULL)
    PRINT 'EQUAL'
ELSE
    PRINT 'NOT EQUAL'
GO

结果:NOT EQUAL

当ANSI_NULLS设置为OFF时(NULL = NULL(;)

SET ANSI_NULLS OFF
GO

IF (NULL=NULL)
    PRINT 'EQUAL'
ELSE
    PRINT 'NOT EQUAL'
GO

结果:EQUAL