Quel est le meilleur moyen de convertir une valeur int ou null en valeur booléenne dans une requête SQL, telle que:
À 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
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.
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
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.
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.
isnull(column - column + 1, 0) != 0
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.
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
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.