2016-12-15 44 views
0

我最近读了一个让我困惑的SQL代码片段。SQL Server是否将空值作为空字符串?

declare @test nvarchar(100) = NULL 
select 
    case 
     when @test <> '' then 1 
     else 0 
    end 

我相当有信心,其结果将是1,因为我觉得NULL并不等同于空字符串。但是,实际输出是0

(我使用的MS SQL Server 2012在Windows 7 64位)

据我明白,''是指示值包含0字符空字符串,和Null意味着数据是在缺席。但现在我不确定这一点。任何人都可以帮我整理一下吗?这是一些免除案件吗?

+1

阅读[this](http://www.w3schools.com/sql/sql_null_values.asp)。 Immagine你正在邀请派对。 ''''就像获得rsvp一样没有任何关系。 'null'完全没有任何回报。 – JohnHC

+0

该比较的结果是“未确定”,不是真或假 – Lamak

+0

如果在比较的任一侧都有NULL,则结果不是真或假,则结果为NULL。这意味着在你的比较中,结果没有评估为真,它评估为NULL,其落入else。 –

回答

0

Null不等于''。

空值是没有值。

Null也不等于NULL,因此SELECT 1 where NULL = NULL也不会返回任何内容。

改为使用它。

declare @test nvarchar(100) = NULL 
select case when @test IS NULL then 1 
      else 0 
     end 
0

使用这样的事情:

声明@Test为nvarchar(100)= NULL

select case when @test <> '' OR @test IS NULL then 1 
      else 0 
     end 
3

当您使用NULL你比较,它始终将返回NULL /不明所以,在事实并非如此,所以是假的。

要分析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 
+2

从技术上讲,比较返回NULL,而不是false。 –

+0

@SeanLange:我已经整合了我的答案 –

0

NULL是不一样的'。就像NULL不同于0. NULL是一个特殊值,用于指示没有存储数据类型的值。

如果您要将NULL结合到具体值,您可以使用SQL Server中的ISNULL或COALESCE函数。

DECLARE @test NVARCHAR(100) = NULL 
SELECT 
    CASE 
     WHEN ISNULL(@test, N'') <> N'' THEN 
      1 
     ELSE 
      0 
    END