Est-il possible d'exprimer 1 ou 0 sous forme de bit lorsqu'il est utilisé comme valeur de champ dans une instruction SELECT?
par exemple
Dans ce cas, l'instruction (qui fait partie d'une instruction select) ICourseBased est de type int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Pour que ce soit un peu type, je dois convertir les deux valeurs.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Existe-t-il un moyen rapide d'exprimer les valeurs sous forme de type de bit sans avoir à effectuer un cast à chaque fois?
(J'utilise MS SQL Server 2005)
sql
sql-server
tsql
bit
Damien McGivern
la source
la source
Vous pouvez ajouter le deuxième extrait de code en tant que définition de champ pour ICourseBased dans une vue.
la source
Non, mais vous pouvez convertir l'expression entière plutôt que les sous-composants de cette expression. En fait, cela le rend probablement moins lisible dans ce cas.
la source
Un peu plus condensé que celui des gbn:
En supposant qu'il
CourseId
est différent de zéroCOALESCE
est comme anISNULL()
, mais renvoie le premier non-Null.Un non-zéro
CourseId
obtiendra uneCourseId
conversion de type en 1, tandis qu'un null entraînera COALESCE pour renvoyer la valeur suivante, 0la source
Si vous voulez que la colonne soit BIT et NOT NULL, vous devez placer ISNULL avant CAST.
la source
Malheureusement non. Vous devrez lancer chaque valeur individuellement.
la source
L'expression à utiliser dans SELECT pourrait être
la source
case when ... else ... end
, il faut encore lancer1
et0
passer au type BIT.Profitez-en :) Sans lancer chaque valeur individuellement.
la source