我最近读了一个使我感到困惑的SQL代码段。
declare @test nvarchar(100) = NULL
select
case
when @test <> '' then 1
else 0
end
我非常有信心结果将是1
,因为我认为NULL
不等于空字符串。但是,实际输出为0
。
(我正在Windows 7 64位上使用MS SQL Server 2012)
据我了解, ''
是一个空字符串,指示该值包含0个字符,而Null
表示数据在不存在的情况下。但是现在我不确定这一点。谁能帮我解决吗?这是一些豁免案件吗?
当您使用 NULL
进行比较时,它总是会返回null/unknown,因此,实际上是不正确的,因此是错误的。
要分析NULL
字段,您必须使用IS NULL
select
case
when @test IS NULL then ....
when @test <> '' then ....
else ....
end
,或者您可以按以下查询重写:
select
case
when @test IS NULL or @test = '' then ...
when @test <> '' then ....
end
null不等于''。
null是没有值。
null也不等于null,因此SELECT 1 where NULL = NULL
也不会返回。
改用此。
declare @test nvarchar(100) = NULL
select case when @test IS NULL then 1
else 0
end
使用类似的东西:
声明@test nvarchar(100)= null
select case when @test <> '' OR @test IS NULL then 1
else 0
end
null与''不同。就像null与0不同。NULL是用于指示数据类型没有值的特殊值。
如果要合并为具体值,则可以在SQL Server中使用isnull或Cocece函数。
DECLARE @test NVARCHAR(100) = NULL
SELECT
CASE
WHEN ISNULL(@test, N'') <> N'' THEN
1
ELSE
0
END