Quel est le meilleur moyen de convertir un int ou nulle à la valeur booléenne dans une requête SQL?
Quel est le meilleur moyen de convertir un int ou nulle à la valeur booléenne dans une requête SQL, tels que:
- Toute valeur non nulle est VRAI dans les résultats
- Aucune valeur null est FAUX dans les résultats
Vous devez vous connecter pour publier un commentaire.
À ma connaissance (corrigez-moi si je me trompe), il n'y a pas de notion de littéral des valeurs booléennes dans SQL. Vous pouvez avoir des expressions de l'évaluation à des valeurs booléennes, mais vous ne pouvez pas les sortir.
Cela dit, vous pouvez utiliser le CAS LORSQUE pour produire une valeur que vous pouvez utiliser dans une comparaison:
bit
. Parce que c'est laBoolean
type de cartographie à partir de sql-server pour .NET. Regarde icibool
. Depuis il n'y a pas de véritable type booléenne que vous pouvez retourner le plus proche de sql-server estbit
. C'est également le type de données que vous à utiliser quand vous voulez le lire commebool
sans conversion dans la plupart des langages comme C++, .NET ou java. Il semble donc pertinent. Aussi, puisque le titre demande une conversion entreint
àbool
il serait utile pour les futurs lecteurs de montrerCAST(CASE WHEN ValueColumn IS NULL THEN 0 ELSE 1 END AS bit) AS BooleanOutput
.'Y'
et'N'
serait. Le point central de toute la chose est que le T-SQL n'a pas Booléens et que vous avez besoin d'utiliser une sorte de convention pour les représenter. La présente convention peut être influencé par la langue que vous êtes en interaction avec - peut-être que C#, peut-être quelque chose d'autre, et n'a rien à voir avec SQL lui-même. Vos "si"-c'est exactement équivalente à la mienne. 😉Pas besoin d'utiliser le cas... lorsque:
Retourne 1 pour tous les champs non NUL, et 0 pour tous les champs qui sont NULS, qui est aussi proche que vous pouvez obtenir pour les booléens en SQL.
Je pense qu'il va quelque chose comme ceci
En fait, la ISNULL il faudra peut-être QUAND thevalue EST NULL, 0
En supposant que vous voulez 0,1 valeur de retour, et que nous parlons entier je voudrais utiliser la logique spécifié par Torbjörn et l'envelopper dans la fonction
alors vous pouvez l'utiliser quand vous en avez besoin en appelant simplement
La réponse fournie par Tomalak est plus universelle, même si, comme il serait de travailler avec tout type de données
Vous voudrez peut-être faire un Convertir(BIT, la Valeur de votre résultat. Parce que quelque chose SQL renvoie une erreur que la valeur est un booléen.
Dans Oracle, en supposant que vous utilisez 0 pour false et 1 pour true:-
Vous pouvez également écrire ce CAS, la syntaxe, mais le dessus est idiomatiques dans Oracle. DÉCODER est un peu comme un switch/case; si le col est NULL, la valeur renvoyée est 0, sinon 1.
Bref, je sais que pour Oracle:
NVL2(value, ifNotNull, ifNull)
retourneifNotNull
si levalue
n'est pas null, etifNull
autrement.Habituellement lors de l'utilisation de 1, cela signifie, c'est vrai, et d'ailleurs dans les autres cas.
Donc: