165 votes

Implique le bit avec constant 1 ou 0 dans SQL Server

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)

238voto

gbn Points 197263
 cast (
  case
    when FC.CourseId is not null then 1 else 0
  end
as bit)
 

La spécification CAST est "CAST (expression AS type)". 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 ...
 

11voto

Michael Petrotta Points 35647

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
 

6voto

Gary McGill Points 8009

Non, mais vous pourriez monter l’expression entière plutôt que les sous-composants de cette expression. En fait, qui probablement le rend moins lisible dans ce cas.

5voto

kpkpkp Points 1

Légèrement plus condensé que gbn:

En supposant que CourseId est non nul

 CAST (COALESCE(FC.CourseId, 0) AS Bit)
 

COALESCE est comme un ISNULL() , mais renvoie le premier non-Null.

Un CourseId non nul obtiendra le transtypage sur 1, tandis qu'un null CourseId fera en sorte que COALESCE renvoie la valeur suivante, 0

1voto

Andrew Hare Points 159332

Malheureusement non. Vous devrez attribuer chaque valeur individuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X