Quel est le meilleur moyen de convertir une valeur int ou null en valeur booléenne dans une requête SQL?
-
05-07-2019 - |
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
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