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, 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 de type, je dois lancer 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 en tant que type de bit sans avoir à lancer à chaque fois?
(J'utilise MS SQL Server 2005)
cast (
case
when FC.CourseId is not null then 1 else 0
end
as bit)
La spécification CAST est "CAST (type d'expression AS)". Le CASE est une expression dans ce contexte.
Si vous avez plusieurs expressions de ce type, je déclarerais bit vars @true et @false et les utiliserais. Ou utilisez des UDF si vous vouliez vraiment ...
DECLARE @True bit, @False bit;
SELECT @True = 1, @False = 0; --can be combined with declare in SQL 2008
SELECT
case when FC.CourseId is not null then @True ELSE @False END AS ...
Vous pouvez ajouter le deuxième extrait en tant que définition de champ pour ICourseBased dans une vue.
DECLARE VIEW MyView
AS
SELECT
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
...
SELECT ICourseBased FROM MyView
Non, mais vous pouvez utiliser l'expression entière plutôt que les sous-composants de cette expression. En fait, cela le rend probablement moins lisible dans ce cas.
Si vous voulez que la colonne soit BIT et NOT NULL, vous devez mettre ISNULL avant le CAST.
ISNULL(
CAST (
CASE
WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
END
AS BIT)
,0) AS IsCoursedBased
Légèrement plus condensé que gbn:
En supposant que CourseId
est différent de zéro
CAST (COALESCE(FC.CourseId, 0) AS Bit)
COALESCE
est comme une ISNULL()
, mais renvoie le premier non-Null.
Une variable CourseId
différente de zéro sera transtypée en 1, tandis qu'une valeur null CourseId
fera en sorte que COALESCE renvoie la valeur suivante, 0
Malheureusement non. Vous devrez attribuer chaque valeur individuellement.
Profitez de ceci:) Sans convertir chaque valeur individuellement.
SELECT ...,
IsCoursedBased = CAST(
CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
AS BIT
)
FROM fc
L’expression à utiliser dans SELECT peut être
CAST(IIF(FC.CourseId IS NOT NULL, 1, 0) AS BIT)