2016-12-15 7 views
0

Ich habe vor kurzem ein SQL-Code-Snippet gelesen, das mich verwirrt.Nimmt SQL Server NULL-Wert als eine leere Zeichenfolge?

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

war ich sehr zuversichtlich, dass das Ergebnis 1 sein wird, da ich denke, NULL auf eine leere Zeichenfolge nicht entspricht. Die tatsächliche Ausgabe ist jedoch 0.

(Ich bin mit MS SQL Server 2012 auf Windows 7 64-Bit)

Soweit ich verstehe, '' ist eine leere Zeichenfolge, die den Wert enthält 0 Zeichen gibt, und Null bedeutet, dass die Daten in Abwesenheit. Aber jetzt bin ich mir nicht sicher. Kann mir jemand helfen, es zu klären? Ist das ein Ausnahmefall?

+1

Lesen [this] (http://www.w3schools.com/sql/sql_null_values.asp). Stellen Sie fest, dass Sie Einladungen zu einer Party senden. '' '' ist, als würde man den rsvp mit nichts zurückbekommen. "null" bekommt überhaupt nichts zurück. – JohnHC

+0

Das Ergebnis dieses Vergleichs ist "unbestimmt", nicht wahr oder falsch – Lamak

+0

Wenn Sie einen NULL auf jeder Seite eines Vergleichs haben, ist das Ergebnis weder wahr noch falsch, das Ergebnis ist NULL. Dies bedeutet, dass in Ihrem Vergleich das Ergebnis nicht als wahr bewertet wurde, sondern als NULL, das in das else fällt. –

Antwort

0

Null ist nicht gleich ''.

Null ist das Fehlen eines Wertes.

Null ist auch nicht gleich Null so SELECT 1 where NULL = NULL wird auch nichts zurückgeben.

Verwenden Sie diese stattdessen.

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

Verwendung so etwas wie dieses:

erklären @Test nvarchar (100) = NULL

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

Wenn Sie NULL für Ihren Vergleich zu verwenden, es wird immer NULL zurück/unknown so, in Tatsache ist nicht wahr, also ist falsch.

Um ein NULL Feld analysieren Sie IS NULL

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

oder Sie Ihre Abfrage wie folgt kann neu schreiben verwenden müssen:

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

Technisch gesehen gibt der Vergleich NULL zurück, nicht falsch. –

+0

@SeanLange: Ich habe meine Antwort integriert –

0

NULL ist nicht das gleiche wie ''. Genau wie NULL ist nicht das Gleiche wie 0. NULL ist ein spezieller Wert, der angibt, dass kein Wert des Datentyps gespeichert wird.

Wenn Sie die NULL auf einen konkreten Wert COALESCE möchten, können Sie die Funktionen ISNULL oder COALESCE in SQL Server verwenden.

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