我有一个看起来像这样的表(只有一个布尔字段):
| IsTrue |
---------------
| 1 |
---------------
| 1 |
---------------
| 0 |
---------------
| 1 |
---------------
有没有办法可以对此字段中的所有值执行按位AND,以便我有一个True / False结果?
类似于:select BITWISE_AND(IsTrue) from MyTable
的结果只有| 0 | ?
答案 0 :(得分:2)
如果你的值只取0或1,那么"按位和"相当于min()
:
select min(IsTrue) as "bitwise_and"
"按位或"相当于max()
:
select max(IsTrue) as "bitwise_or"
这是一个数字事实,因此它独立于所使用的数据库。
答案 1 :(得分:0)
可能是最通用的解决方案,如果我可以采用面值,该列包含1
或0
(如上所示),则为min(IsTrue)
。< / p>
但有几点需要注意:
您要求的是“按位”AND
,但您描述“逻辑”AND
- 如果该列包含数字“1” = TRUE或0 = FALSE“,是相同的;但在其他情况下可能只是有点相同。
某些数据库提供按位运算符,而其他数据库则不提供。而按位聚合函数完全是另一回事。这就是为什么min
是一个更通用的解决方案;这是任何数据库都会提供的标准功能。它将适用于各种各样的情况,包括你似乎在概述的情况。如果列类型在技术上是一个DBMS没有定义min
(或以某种奇怪的方式定义它),那么它将失败。如果否定号码可以被解释为“真”,那么它将会失败(但在这种情况下,也许你可以使用min(abs(isTrue))
或类似的东西)。