【问题标题】:Select a nullable bit with a default value选择具有默认值的可空位
【发布时间】:2011-03-21 18:47:31
【问题描述】:

我需要在视图中选择一个可为空的位列,但只要值为 NULL,就使用默认值 FALSE。 (由于其他原因,我无法在源表本身上添加默认值。)这就是我正在做的事情。

CAST 
(
    CASE 
    WHEN bit_column IS NULL THEN 0 
    ELSE bit_column  
END 
    AS BIT
) AS bit_column,
...

我必须在四列上执行此操作,所以我想知道是否有更好/更有效的方法来执行此操作。

【问题讨论】:

    标签: sql tsql sql-server-2000 bit


    【解决方案1】:

    使用 isnull 函数。

    isnull(bit_column, 0)
    

    【讨论】:

      【解决方案2】:
      SELECT coalesce(bit_column,0) bit_column
      

      【讨论】:

      • 发送给客户端的数据类型是什么?整数还是位?
      • 会向客户端发送一个位。
      • 好问题,我研究了它并找到了这个链接:databases.aspfaq.com/database/coalesce-vs-isnull-sql.html 从那里,“COALESCE 更像一个 CASE 表达式,它根据优先级返回单个数据类型并适应所有可能的结果”。所以我不确定。但在客户端,0 或 1 将适合位或 int,所以我不确定它是否重要。
      • 感谢您的链接。看来,由于我总是希望结果具有第一个参数的数据类型,所以我应该使用 ISNULL。当我在 SQL Server Management Studio 中浏览视图时,ISNULL 还允许我查看 True 或 False(首选 1 或 0)。所以我将接受 ISNULL 答案。但是,我可以看到许多情况下 COALESCE 是更好的选择。感谢您的帮助。
      • SELECT coalesce(bit_column, cast(0 as bit)) bit_column
      【解决方案3】:

      看看Coalesce

      【讨论】:

        【解决方案4】:

        T-SQL 使用

        SELECT coalesce(bit_column, cast(0 as bit)) bit_column
        

        在代码示例中,

         , examStatus.text
         , COALESCE(examStatus.archived, cast(0 as bit))
        

        如果exam​​Status.archived 为NULL,它将默认为0(又名false)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-20
          • 1970-01-01
          • 1970-01-01
          • 2020-08-23
          • 2013-04-25
          • 2021-09-24
          相关资源
          最近更新 更多