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表示数据在不存在的情况下。但是现在我不确定这一点。谁能帮我解决吗?这是一些豁免案件吗?

当您使用 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

相关内容

  • 没有找到相关文章

最新更新