web-dev-qa-db-fra.com

Renvoyer une valeur booléenne dans une instruction SQL Select

Comment retourner une valeur booléenne sur une instruction SQL Select?

J'ai essayé ce code:

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

et ne retourne que la valeur TRUE si la UserID existe sur la table. Je veux qu'il renvoie la valeur FALSE si la UserID n'existe pas sur la table. Merci beaucoup.

108
mrjimoy_05

Ce que vous avez là ne renverra aucune ligne si l'utilisateur n'existe pas. Voici ce dont vous avez besoin:

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

Peut-être quelque chose dans ce sens:

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

Étant donné que 1 = true et 0 = false sont couramment utilisés, il suffit de compter le nombre de lignes et de transtyper en boolean.

Par conséquent, votre code posté n'a besoin que d'une fonction COUNT() ajoutée:

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)

Si count (*) = 0 renvoie false. Si count (*)> 0 renvoie true.

7
G.Noulas

Je le fais comme ça:

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

Considérer comme un booléen ne peut jamais être nul (du moins dans .NET), il devrait être défini par défaut sur false ou vous pouvez le définir vous-même s'il est défini sur true Cependant 1 = true, donc null = false et aucune syntaxe supplémentaire.

Remarque: J'utilise Dapper comme micro-ordinateur. J'imagine que ADO devrait fonctionner de la même manière.

4
RandomUs1r

Utilisez 'Exists' qui renvoie 0 ou 1.

La requête sera comme:

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

Pour ceux d'entre vous qui souhaitent obtenir la valeur en ajoutant un nom de colonne personnalisé, cela a fonctionné pour moi:

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

Vous pouvez ignorer les guillemets du nom de la colonne au cas où vous ne voudriez pas conserver la sensibilité à la casse du nom (dans certains clients).

J'ai légèrement modifié @ la réponse de Chad pour cela.

0
Lucio Mollinedo

Notez un autre problème équivalent: création d'une requête SQL qui renvoie (1) si la condition est remplie et un résultat vide dans le cas contraire. Notez qu'une solution à ce problème est plus générale et peut facilement être utilisée avec les réponses ci-dessus pour répondre à la question que vous avez posée. Puisque ce problème est plus général, je prouve sa solution en plus des belles solutions présentées ci-dessus pour votre problème.

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