Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 1036 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Imply bit with constant 1 or 0 in SQL Server

#1
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)
Reply

#2
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.
Reply

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

#4
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

Reply

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

Reply

#6
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
Reply

#7
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
Reply

#8
The expression to use inside SELECT could be

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

#9
Tested and functional

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



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through