我有一个看起来像这样的表(只是一个布尔字段):
| IsTrue |
---------------
| 1 |
---------------
| 1 |
---------------
| 0 |
---------------
| 1 |
---------------
有什么方法可以在该字段中的所有值上进行刻度,以便我有一个true/false结果?
类似: select BITWISE_AND(IsTrue) from MyTable
的结果|0 |?
如果仅具有0或1的值,则"位和"等效于 min()
:
select min(IsTrue) as "bitwise_and"
和"位或"等效于max()
:
select max(IsTrue) as "bitwise_or"
这是一个数字事实,因此它与所使用的数据库无关。
可能是最通用的解决方案,如果我可以在上面显示的列中列出列包含 1
或 0
的面值,则是 min(IsTrue)
。
但有几个警告:
您正在要求使用"位" AND
,但是您描述 a"逻辑" AND
-如果列保存数字,则该列是" 1 = true或0 = false",是一样的;但是在其他情况下,可能只是相同的。
有些数据库提供位运算符,而另一些数据库则不提供。而且位汇总函数完全是另外一回事。这就是为什么min
是一个更通用的解决方案。这是任何数据库提供的标准功能。它将在各种情况下工作,包括您似乎正在概述的情况。如果列类型在技术上是您的DBMS无法定义min
(或以某种怪异的方式定义),则将失败。如果a 负数数字可以解释为" true"(但是在这种情况下,也许您可以使用min(abs(isTrue))
或类似的东西)。