SQL - 按位AND布尔值字段的所有结果

时间:2017-11-30 17:24:44

标签: sql sql-server bitwise-operators

我有一个看起来像这样的表(只有一个布尔字段):

| IsTrue      |
---------------
| 1           |
---------------
| 1           |
---------------
| 0           |
---------------
| 1           |
---------------

有没有办法可以对此字段中的所有值执行按位AND,以便我有一个True / False结果?

类似于:select BITWISE_AND(IsTrue) from MyTable的结果只有| 0 | ?

2 个答案:

答案 0 :(得分:2)

如果你的值只取0或1,那么"按位和"相当于min()

select min(IsTrue) as "bitwise_and"

"按位或"相当于max()

select max(IsTrue) as "bitwise_or"

这是一个数字事实,因此它独立于所使用的数据库。

答案 1 :(得分:0)

可能是最通用的解决方案,如果我可以采用面值,该列包含10(如上所示),则为min(IsTrue)。< / p>

但有几点需要注意:

您要求的是“按位”AND,但您描述“逻辑”AND - 如果该列包含数字“1” = TRUE或0 = FALSE“,是相同的;但在其他情况下可能只是有点相同。

某些数据库提供按位运算符,而其他数据库则不提供。而按位聚合函数完全是另一回事。这就是为什么min是一个更通用的解决方案;这是任何数据库都会提供的标准功能。它将适用于各种各样的情况,包括你似乎在概述的情况。如果列类型在技术上是一个DBMS没有定义min(或以某种奇怪的方式定义它),那么它将失败。如果否定号码可以被解释为“真”,那么它将会失败(但在这种情况下,也许你可以使用min(abs(isTrue))或类似的东西)。