当语句中的列值为空时,如何从 select 语句中 return 位值

How do i return bit value from a select statement when a column value in the statement is null

在 select 查询中,其中一列是可为空的 varchar 列。如果特定列为 NULL,return 如何作为位值 10

我试过这样做

select
    isnull(nullif(isnull(JavascriptCode, 0),JavascriptCode), 1) as HasJavaScriptCode
from code

但这似乎是 return 一个字符串值,所以我不能在我的代码中使用。

使用CASE:

SELECT CAST(CASE WHEN JavascriptCode IS NULL THEN 0 ELSE 1 END As bit) As HasJavaScriptCode
FROM code

自 2012 版本(目前受支持的最旧版本)SQL 服务器支持 IIF - 可以用来代替简单的 case 表达式来创建更简洁的代码:

SELECT CAST(IIF(JavascriptCode IS NULL, 0,1) As bit) As HasJavaScriptCode
FROM code

使用 CASE 表达式与 CAST:

select
    case when JavascriptCode is null 
         then cast(0 as bit) 
         else cast(1 as bit) end as HasJavaScriptCode
from code

看来每个人都同意您应该使用 case 语句。我要指出的是,您应该明确定义该列是否可能包含空字符串以及返回 1 或 0 可能意味着什么。一种解决方案可能如下所示:

select
  cast(
    case when JavascriptCode is null or len(JavascriptCode) = 0
      then 0
      else 1
    end
    as bit
  ) as HasJavascriptCode
from code

这只是编写此类语句的多种方式的另一种变体。这个只是简单地将 case 语句包装在一个强制转换中,以防止其中一个 case 不是位。我承认不好看