type - Imply bit con constante 1 o 0 en SQL Server
tipos de datos sql server msdn (8)
¿Es posible expresar 1 o 0 como un bit cuando se usa como un valor de campo en una declaración de selección?
p.ej
En esta declaración de caso (que es parte de una declaración de selección) ICourseBased es de tipo int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Para que sea un tipo de bit, tengo que emitir ambos valores.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
¿Hay una manera corta de expresar los valores como tipo de bit sin tener que lanzar cada vez?
(Estoy usando MS SQL Server 2005)
Disfruta esto :) Sin lanzar cada valor individualmente.
SELECT ...,
IsCoursedBased = CAST(
CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
AS BIT
)
FROM fc
IIF (FC.CourseId NO ES NULO, 1, 0)
Lamentablemente no. Tendrás que lanzar cada valor individualmente.
No, pero podrías lanzar la expresión completa en lugar de los subcomponentes de esa expresión. En realidad, eso probablemente lo hace menos legible en este caso.
Puede agregar el segundo fragmento como definición de campo para ICourseBased en una vista.
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
Si desea que la columna sea BIT y NOT NULL, debe colocar ISNULL antes del CAST.
ISNULL(
CAST (
CASE
WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
END
AS BIT)
,0) AS IsCoursedBased
Un poco más condensado que los gbn:
Suponiendo CourseId
no es cero
CAST (COALESCE(FC.CourseId, 0) AS Bit)
COALESCE
es como un ISNULL()
, pero devuelve el primer no nulo.
Un CourseId
cero se CourseId
en yeso a 1, mientras que CourseId
nulo hará que COALESCE devuelva el siguiente valor, 0
cast (
case
when FC.CourseId is not null then 1 else 0
end
as bit)
La especificación CAST es "CAST (expresión AS tipo)". El CASO es una expresión en este contexto.
Si tiene varias de esas expresiones, declararía bit vars @true y @false y las usaría. O use UDF si realmente quisiera ...
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 ...