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

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

Question

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 est TRUE dans les résultats
  • .
  • Toute valeur NULL est FALSE dans les résultats
Était-ce utile?

La solution

À 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 

Autres conseils

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

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

Retourne 1 pour tous les champs non NULL et 0 pour tous les champs qui sont NULL, ce qui est aussi proche que possible des booléens en SQL.

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 est NULL ALORS 0

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

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

afin que vous puissiez l'utiliser quand vous en avez besoin en appelant simplement

select dbo.isNotNull(myIntColumn) from myTable

La réponse fournie par Tomalak est plus universel, bien que fonctionnant avec n'importe quel type de données

Vous pouvez vouloir convertir vos résultats (BIT, Valeur). Parce que quelque chose SQL va retourner une erreur que la valeur n'est pas un booléen.

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

Sous 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.

Le plus court que je connaisse pour Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2 (valeur, ifNotNull, ifNull) renvoie ifNotNull si valeur n'est pas nul et ifNull sinon.

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

Donc:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top