2016-12-15 10 views
0

私は最近、私を混乱させるSQLコードスニペットを読んでいます。SQL ServerはNULL値を空の文字列として使用しますか?

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

私はNULLが空の文字列に相当しないと思うので、結果は、1になると、かなり自信がありました。ただし、実際の出力は0です。

(私はWindows 7の64ビット版にMS SQL Server 2012のを使用しています)私の知る限り理解し

''は、値が0の文字が含まれていることを示し、そしてNullデータがであることを意味空の文字列です不在。しかし、今私はこれについては分かりません。誰かがそれを整理するのを助けることができますか?これはいくつかの免除のケースですか?

+1

[こちら](http://www.w3schools.com/sql/sql_null_values.asp)をお読みください。あなたがパーティーに招待状を送っていることを知らせてください。 '' ''は' 'rsvpのスリップを無駄に戻すようなものだ。 「ヌル」は何も戻っていない。 – JohnHC

+0

その比較の結果は真または偽ではない "未定"です – Lamak

+0

比較のどちらかにNULLがある場合、結果は真または偽ではなく、結果はNULLです。これは、比較の結果が真であると評価されなかったことを意味し、elseに該当するNULLに評価されます。 –

答えて

0

ヌルは ''と等しくありません。

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を/返します。事実は真実ではないので、虚偽である。

あなたは IS NULL

select 
    case 
     when @test IS NULL then .... 
     when @test <> '' then .... 
     else .... 
    end 

使用する必要がありますNULLフィールドを分析するか、次のようにクエリを再作成することができます:

select 
    case 
     when @test IS NULL or @test = '' then ... 
     when @test <> '' then .... 
    end 
+2

技術的に言えば、比較はNULLを返します。 –

+0

@SeanLange:私は自分の答えを統合しました –

0

NULLを '' と同じではありません。 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 
関連する問題