web-dev-qa-db-fra.com

Quel est le meilleur moyen de convertir une valeur int ou null en valeur booléenne dans une requête SQL?

Quel est le meilleur moyen de convertir une valeur int ou null en valeur booléenne dans une requête SQL, telle que:

  • Toute valeur non nulle estTRUEdans les résultats
  • Toute valeur nulle estFALSEdans les résultats
31
Thomas Bratt

À ma connaissance (corrigez-moi si je me trompe), il n'y a pas de concept de valeurs booléennes littérales dans SQL. Vous pouvez avoir des expressions évaluant des valeurs booléennes, mais vous ne pouvez pas les générer.

Ceci dit, vous pouvez utiliser CASE WHEN pour produire une valeur que vous pouvez utiliser dans une comparaison:

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

Pas besoin d'utiliser le cas ... quand:

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

Renvoie 1 pour tous les champs non NULL et 0 pour tous les champs NULL, aussi proches que possible des booléens en SQL. 

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

Je pense que ça va quelque chose comme ça

En fait, l'ISNULL peut avoir besoin d'être QUAND la valeur IS NULL THEN 0

4
mattlant

En supposant que vous vouliez une valeur de 0,1 comme valeur de retour et que nous parlions d’entier, j’utiliserais la logique spécifiée par Torbjörn et l’envelopperai dans la fonction

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

alors vous pouvez l'utiliser quand vous en avez besoin en appelant simplement 

select dbo.isNotNull(myIntColumn) from myTable

La réponse fournie par Tomalak est plus universelle, car elle fonctionnerait avec n’importe quel type de données.

3
kristof

Vous voudrez peut-être effectuer une conversion (BIT, Valeur) de votre résultat. Parce que quelque chose SQL va retourner une erreur que la valeur n'est pas un booléen.

2
Patrick Parent
isnull(column - column + 1, 0) != 0
1

Dans Oracle, supposons que vous utilisiez 0 pour false et 1 pour true: -

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

Vous pouvez également écrire ceci en utilisant la syntaxe CASE, mais la procédure ci-dessus est idiomatique dans Oracle. DECODE est un peu comme un commutateur/boîtier; si col est NULL, 0 est renvoyé, sinon 1.

1
WW.

Habituellement, lorsque vous utilisez 1, cela signifie est vrai et dans les autres cas. 

Alors:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
0
David Castro

Le plus court que je connaisse pour Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) renvoie ifNotNull si la value n'est pas nulle et ifNull sinon.

0
PL_kolek