如何在SQL中组合两个可以为空的布尔字段

时间:2017-01-30 12:32:51

标签: sql sql-server

我有这些字段:

 ISNULL(
    dbo.Features.TheifAlarm,
    0
) AS ExtraTheifAlarm,
 ISNULL(
    dbo.Features.FireAlarm,
    0
) AS ExtraFireAlarm,

dbo.Features.TheifAlarmdbo.Features.FireAlarm可以为bits。但是我使用的是EntityFramework,它们在我的模型中可以为boolean。我想将它们与OR结合起来。

这是我的尝试:

     ISNULL(
        dbo.Features.TheifAlarm,
        0
    )
OR
     ISNULL(
        dbo.Features.FireAlarm,
        0
    )

但它没有用,我怎么能把这两列合并?提前致谢

2 个答案:

答案 0 :(得分:2)

结合'您可以使用两个字段bitwise operators

在你的情况下(在SELECT列表中):

SELECT (ISNULL(col1, 0) | ISNULL(col2, 0)) AS combinedCol FROM ...

或作为WHERE条件:

SELECT ... WHERE (ISNULL(col1, 0) = 1 OR ISNULL(col2, 0) = 1)

实际上你甚至不需要在WHERE条件中使用ISNULL()(当{1}}为空时,col1 = 1的计算结果为FALSE(ok,NULL,但被视为FALSE):

SELECT ... WHERE (col1 = 1 OR col2 = 1)

编辑:只是添加一些替代方案:

简单添加

SELECT IIF((ISNULL(col1, 0) + ISNULL(col2, 0)) > 0, 1, 0)

CASE..WHEN结构(如iamdave所述)

SELECT CASE WHEN col1 = 1 THEN 1 ELSE IIF(col2 = 1, 1, 0) END

另一个案例......她

SELECT CASE WHEN (col1 = 1 OR col2 = 1) THEN 1 ELSE 0 END

或与IIF

SELECT IIF(col1 = 1 OR col2 = 1), 1, 0)

答案 1 :(得分:1)

我假设您想要返回true,如果其中一个字段为true

如果是这样,您可以使用case

检查两者
select case when ISNULL(dbo.Features.TheifAlarm,0) = 0  -- If the first is False
            then ISNULL(dbo.Features.FireAlarm,0)       -- Return the value of the second
            else 1                                      -- Otherwise return True
            end as EitherAlarmCheck

如果您要根据True中的某个值过滤数据集,可以在OR子句中使用where

select Cols
from Table
where ISNULL(dbo.Features.TheifAlarm,0) = 1
   or ISNULL(dbo.Features.FireAlarm,0) = 1