Was ist der beste Weg, um einen int oder null boolean Wert in einer SQL-Abfrage zu konvertieren?

StackOverflow https://stackoverflow.com/questions/177956

Frage

Was ist der beste Weg, um einen int oder null boolean Wert in einer SQL-Abfrage, so dass konvertieren:

  • Alle Nicht-Null-Wert ist TRUE in den Ergebnissen
  • Jeder Nullwert ist false in den Ergebnissen
War es hilfreich?

Lösung

Mein Wissen (korrigiert mich wenn ich falsch liege), gibt es kein Konzept der wörtlichen Boolesche Werte in SQL. Sie können Ausdrücke Auswertung zu Boolesche Werte haben, aber Sie können nicht ausgeben.

Das heißt, Sie können CASE verwenden, wenn ein Wert erzeugen Sie in einem Vergleich verwenden können:

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 

Andere Tipps

Keine Notwendigkeit Fall zu verwenden ... wenn:

select (column_name is not null) as result from table_name;

Gibt 1 für alle Felder, die nicht NULL und 0 für alle Felder, die NULL sind, die so nah wie Sie booleans in SQL zu bekommen.

SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

Ich denke, es ist etwas geht

Eigentlich ist die ISNULL, müssen möglicherweise sein, wenn theValue NULL IST DANN 0

Angenommen, Sie 0,1 Wert als Rück wollen, und dass wir über integer sprechen ich die Logik von Torbjörn und wickeln sie es in der Funktion

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

so ist, dann können Sie es verwenden, wenn Sie einfach durch Aufruf benötigen

select dbo.isNotNull(myIntColumn) from myTable

Die Antwort von Tomalak universellere ist aber, wie es mit einem beliebigen Datentyp

Sie können einen Convert (BIT, Wert) von Ihrem Ergebnis zu tun. Weil etwas SQL einen Fehler zurück, dass der Wert ist kein boolean.

isnull(column - column + 1, 0) != 0

In Oracle, vorausgesetzt, Sie 0 für falsch verwenden und 1 für wahr: -

SELECT DECODE( col, NULL, 0, 1) FROM ...

Sie können auch schreiben dies der Fall Syntax, aber die oben ist idiomatisch in Oracle. DECODE ist ein wenig wie ein Schalter / Gehäuse; wenn col NULL ist dann 0 zurückgegeben, sonst 1.

Die kürzeste, die ich kenne für Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) kehrt ifNotNull wenn der value nicht null ist, und ifNull sonst.

In der Regel, wenn die Verwendung 1, bedeutet dies wahr ist und sonst in anderen Fällen.

So:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top