我最近读了一个令我困惑的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
表示数据处于缺席状态。但现在我不确定这一点。任何人都可以帮我解决一下吗?这是一些豁免案例吗?
答案 0 :(得分:3)
当您使用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
答案 1 :(得分:0)
Null并不等于&#39;&#39;。
Null是缺少值。
Null也不等于Null,因此SELECT 1 where NULL = NULL
也不会返回任何内容。
改为使用它。
declare @test nvarchar(100) = NULL
select case when @test IS NULL then 1
else 0
end
答案 2 :(得分:0)
使用类似的东西:
声明@test nvarchar(100)= NULL
select case when @test <> '' OR @test IS NULL then 1
else 0
end
答案 3 :(得分:0)
NULL与&#39;&#39;不同。就像NULL与0不同.NULL是一个特殊值,用于表示没有存储数据类型的值。
如果要将NULL COALESCE为具体值,可以在SQL Server中使用ISNULL或COALESCE函数。
DECLARE @test NVARCHAR(100) = NULL
SELECT
CASE
WHEN ISNULL(@test, N'') <> N'' THEN
1
ELSE
0
END