SQL Server是否将NULL值作为空字符串?

时间:2016-12-15 15:34:47

标签: sql sql-server null

我最近读了一个令我困惑的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表示数据处于缺席状态。但现在我不确定这一点。任何人都可以帮我解决一下吗?这是一些豁免案例吗?

4 个答案:

答案 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