与SQL Server中的不等于(<>)相关的问题

时间:2013-10-25 06:51:41

标签: sql sql-server

我在SQL Server中有以下代码,

declare @previouspulse int = 0
declare @previousox int = 0
declare @Pulse int = 0
declare @SpO2 int = 0

set @previouspulse = null  
set @Pulse= 121
set @previousox = 56 
set @SpO2 = null

IF @previouspulse <> @Pulse or @previousox <> @SpO2 
    select -1
else
    select -2

我从上面的代码

获得结果-2

我的问题是:

如果符号<>表示not equal to,那么我应该得到结果-1而不是-2

所以在条件中,在上面的代码中,如果其中一个条件满足if条件那么我应该得到结果-1而在我的情况下我在两个confition中得到true,如果符号'<>'表示'Not Equal to(!=)'

符号'<>'的含义是'Not Equal to(!=)' ???

由于

3 个答案:

答案 0 :(得分:4)

这就是原因,

@previouspulse <> @Pulse OR @previousox <> @SpO2
              NULL       OR            NULL
                        NULL

因为您只有两条路径,所以它会落在FALSE块上,结果为-2。与NULL值进行比较时,使用IS NULLIS NOT NULL

答案 1 :(得分:1)

NULL值表示丢失或未知数据。无法使用比较运算符测试NULL值,例如=,&lt;或&lt;&gt;因为与未知数据的比较会导致未知数据。

使用ISNULL运算符从比较中获得正确的结果:

declare @previouspulse int = 0
declare @previousox int = 0
declare @Pulse int = 0
declare @SpO2 int = 0

set @previouspulse = null  
set @Pulse= 121
set @previousox = 56 
set @SpO2 = null

IF isnull(@previouspulse,0) <> isnull(@Pulse,0) or isnull(@previousox,0) <> isnull(@SpO2,0)
    select -1
else
    select -2

答案 2 :(得分:0)

在比较变量

之前,您可以使用ISNULL函数
declare @previouspulse int = 0
declare @previousox int = 0
declare @Pulse int = 0
declare @SpO2 int = 0

set @previouspulse = null  
set @Pulse= 121
set @previousox = 56 
set @SpO2 = null

IF ISNULL(@previouspulse,0) <> @Pulse or @previousox <> ISNULL(@SpO2,0)
    select -1
else
    select -2