Imply bit with constant 1 or 0 in SQL Server

后端 未结 8 1626
一生所求
一生所求 2020-12-13 07:56

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)

相关标签:
8条回答
  • 2020-12-13 08:17

    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
    
    0 讨论(0)
  • 2020-12-13 08:18
    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 ...
    
    0 讨论(0)
  • 2020-12-13 08:18

    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
    
    0 讨论(0)
  • 2020-12-13 08:19

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

    0 讨论(0)
  • 2020-12-13 08:27

    The expression to use inside SELECT could be

    CAST(IIF(FC.CourseId IS NOT NULL, 1, 0) AS BIT)
    
    0 讨论(0)
  • 2020-12-13 08:38

    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

    0 讨论(0)
提交回复
热议问题