0Day Forums
Imply bit with constant 1 or 0 in SQL Server - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: Database (https://0day.red/Forum-Database)
+---- Forum: Microsoft SQL Server (https://0day.red/Forum-Microsoft-SQL-Server)
+---- Thread: Imply bit with constant 1 or 0 in SQL Server (/Thread-Imply-bit-with-constant-1-or-0-in-SQL-Server)



Imply bit with constant 1 or 0 in SQL Server - itis684 - 07-31-2023

Is it possible to express 1 or 0 as a bit when used as a field value in a select statement?

e.g.


In this case statement (which is part of a select statement) ICourseBased is of type int.

case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased


To get it to be a bit type I have to cast both values.

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



Is there a short hand way of expressing the values as bit type without having to cast every time?

(I'm using MS SQL Server 2005)



RE: Imply bit with constant 1 or 0 in SQL Server - collettegkxeik - 07-31-2023

No, but you could cast the whole expression rather than the sub-components of that expression. Actually, that probably makes it *less* readable in this case.


RE: Imply bit with constant 1 or 0 in SQL Server - hazing574 - 07-31-2023

Unfortunately, no. You will have to cast each value individually.


RE: Imply bit with constant 1 or 0 in SQL Server - metricism877284 - 07-31-2023

You might add the second snippet as a field definition for ICourseBased in a view.

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




RE: Imply bit with constant 1 or 0 in SQL Server - suvaneetwftdlyp - 07-31-2023

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

The CAST spec is "CAST (expression AS type)". The CASE is an *expression* in this context.

If you have multiple such expressions, I'd declare bit vars @true and @false and use them. Or use UDFs if you really wanted...

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 ...




RE: Imply bit with constant 1 or 0 in SQL Server - Drbolter5 - 07-31-2023

Slightly more condensed than gbn's:

Assuming `CourseId` is non-zero

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

`COALESCE` is like an `ISNULL()`, but returns the first non-Null.

A Non-Zero `CourseId` will get type-cast to a 1, while a null `CourseId` will cause COALESCE to return the next value, 0



RE: Imply bit with constant 1 or 0 in SQL Server - scaler70 - 07-31-2023

If you want the column is BIT and NOT NULL, you should put ISNULL before the CAST.

ISNULL(
CAST (
CASE
WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
END
AS BIT)
,0) AS IsCoursedBased


RE: Imply bit with constant 1 or 0 in SQL Server - treponemiasis118394 - 07-31-2023

The expression to use inside SELECT could be

CAST(IIF(FC.CourseId IS NOT NULL, 1, 0) AS BIT)


RE: Imply bit with constant 1 or 0 in SQL Server - wokas885348 - 07-31-2023

Tested and functional

SELECT fc.CourseId, IsCoursedBased = CAST(CASE WHEN fc.CourseId IS NOT NULL THEN 1 ELSE 0 END AS BIT)
FROM fc