我在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(!=)'
???
由于
答案 0 :(得分:4)
这就是原因,
@previouspulse <> @Pulse OR @previousox <> @SpO2
NULL OR NULL
NULL
因为您只有两条路径,所以它会落在FALSE
块上,结果为-2
。与NULL
值进行比较时,使用IS NULL
或IS 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