it-swarm.com.de

Rückgabe eines booleschen Werts für die SQL-Select-Anweisung

Wie gibt man einen booleschen Wert in der SQL Select-Anweisung zurück?

Ich habe diesen Code ausprobiert:

SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

und nur TRUE value zurückgeben, wenn UserID in der Tabelle vorhanden ist. Ich möchte, dass es FALSE value zurückgibt, wenn die UserID nicht in der Tabelle vorhanden ist. Vielen Dank.

108
mrjimoy_05

Was Sie dort haben, gibt keine Zeile zurück, wenn der Benutzer nicht existiert. Hier ist was Sie brauchen:

SELECT CASE WHEN EXISTS (
    SELECT *
    FROM [User]
    WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
207
Chad

Möglicherweise etwas in diese Richtung:

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;

http://sqlfiddle.com/#!3/5e555/1

21
cableload

Da Sie 1 = true und 0 = false normalerweise verwenden, müssen Sie nur die Anzahl der Zeilen zählen und in eine boolean konvertieren.

Für Ihren veröffentlichten Code muss daher nur eine COUNT()-Funktion hinzugefügt werden:

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
19
Stewart
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

Wenn count (*) = 0 ist, wird false zurückgegeben. Wenn count (*)> 0 den Wert true zurückgibt.

7
G.Noulas

So mach ich es:

SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022

Wenn Sie sehen, dass ein Boolean-Wert niemals leer sein kann (zumindest in .NET), sollte er standardmäßig auf "false" gesetzt werden, oder Sie können ihn selbst auf "true" setzen. Jedoch 1 = wahr, also null = falsch und keine zusätzliche Syntax.

Hinweis: Ich benutze Dapper als Mikro-Orm. Ich würde mir vorstellen, dass ADO genauso funktionieren sollte.

4
RandomUs1r

Verwenden Sie 'Exists', die entweder 0 oder 1 zurückgibt.

Die Abfrage lautet wie folgt:

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)
3
Ananthi

Für diejenigen von Ihnen, die daran interessiert sind, den Wert durch Hinzufügen eines benutzerdefinierten Spaltennamens zu erhalten, hat dies für mich funktioniert:

CAST(
    CASE WHEN EXISTS ( 
           SELECT * 
           FROM mytable 
           WHERE mytable.id = 1
    ) 
    THEN TRUE 
    ELSE FALSE 
    END AS bool) 
AS "nameOfMyColumn"

Sie können die Anführungszeichen aus dem Spaltennamen überspringen, falls Sie nicht daran interessiert sind, die Groß- und Kleinschreibung des Namens zu beachten (in einigen Kunden).

Ich habe @ Chad's Antwort etwas verändert.

0
Lucio Mollinedo

Beachten Sie ein anderes gleichwertiges Problem: Erstellen einer SQL-Abfrage, die (1) zurückgibt, wenn die Bedingung erfüllt ist, andernfalls ein leeres Ergebnis Beachten Sie, dass eine Lösung für dieses Problem allgemeiner ist und mit den obigen Antworten problemlos verwendet werden kann, um die gestellte Frage zu lösen. Da dieses Problem allgemeiner ist, beweise ich seine Lösung zusätzlich zu den oben dargestellten schönen Lösungen für Ihr Problem.

SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)
0