0

我在 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,在我的情况下true,如果符号'<>'意味着'Not Equal to(!=)'

这个符号真的'<>'意味着'Not Equal to(!=)'???

谢谢

4

3 回答 3

4

这就是为什么,

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

由于您只有两条路径,因此它落在FALSE块上,结果为-2. 当与NULL价值使用IS NULL或比较时IS NOT NULL

于 2013-10-25T06:57:55.407 回答
1

NULL 值表示缺失或未知数据。无法使用比较运算符(例如 =、< 或 <>)测试 NULL 值,因为与未知数据进行比较会产生未知数据。

使用 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
于 2013-10-25T07:01:22.953 回答
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
于 2013-10-25T06:59:56.167 回答