Was ist der beste Weg, um einen int oder null boolean Wert in einer SQL-Abfrage zu konvertieren?
-
05-07-2019 - |
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
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