admin

在SQL Server中隐含常数1或0的位

sql

在select语句中用作字段值时,可以将1或0表示为一位吗?

例如

在这种情况下,语句(属于select语句)ICourseBased的类型为int。

case 
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased

为了使它成为位类型,我必须转换两个值。

case 
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased

是否有一种简便的方法可以将值表示为位类型而不必每次都强制转换?

(我正在使用MS SQL Server 2005)


阅读 214

收藏
2021-05-10

共1个答案

admin

cast (
  case
    when FC.CourseId is not null then 1 else 0
  end
as bit)

CAST规范为“ CAST(表达式AS类型)”。在这种情况下,CASE是一个 表达式

如果您有多个这样的表达式,我将声明vars @true和@false并使用它们。或者如果您真的想要使用UDF …

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 ...
2021-05-10