当语句中的列值为空时,如何从 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 如何作为位值 1
或 0
?
我试过这样做
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 不是位。我承认不好看
在 select 查询中,其中一列是可为空的 varchar 列。如果特定列为 NULL,return 如何作为位值 1
或 0
?
我试过这样做
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 不是位。我承认不好看