Dam*_*ern 144 sql t-sql sql-server bit
当在select语句中用作字段值时,是否可以将1或0表示为位?
例如
在这种情况下,语句(它是select语句的一部分)ICourseBased的类型为int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Run Code Online (Sandbox Code Playgroud)
要使它成为一种类型,我必须转换两个值.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方式将值表示为位类型,而不必每次都进行转换?
(我正在使用MS SQL Server 2005)
gbn*_*gbn 215
cast (
case
when FC.CourseId is not null then 1 else 0
end
as bit)
Run Code Online (Sandbox Code Playgroud)
CAST规范是"CAST(表达式AS类型)".CASE是这种情况下的表达.
如果你有多个这样的表达式,我会声明位变量@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 ...
Run Code Online (Sandbox Code Playgroud)
Mic*_*tta 10
您可以在视图中将第二个片段添加为ICourseBased的字段定义.
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
Run Code Online (Sandbox Code Playgroud)
比 gbn 更简洁:
假设CourseId
非零
CAST (COALESCE(FC.CourseId, 0) AS Bit)
Run Code Online (Sandbox Code Playgroud)
COALESCE
就像一个ISNULL()
,但返回第一个非空值。
非零CourseId
将被类型转换为 1,而 nullCourseId
将导致 COALESCE 返回下一个值 0