SQL - 按位与布尔值字段的所有结果
SQL - bitwise AND all results of a boolean value field
我有一个 table 看起来像这样(只有一个布尔字段):
| IsTrue |
---------------
| 1 |
---------------
| 1 |
---------------
| 0 |
---------------
| 1 |
---------------
有没有一种方法可以对这个字段中的所有值执行按位与运算,以便得到一个 True/False 结果?
类似于:select BITWISE_AND(IsTrue) from MyTable
的结果是 | 0 | ?
如果您的值只取 0 或 1,则 "bitwise and" 等同于 min()
:
select min(IsTrue) as "bitwise_and"
而"bitwise or"等同于max()
:
select max(IsTrue) as "bitwise_or"
这是一个数字事实,因此它与所使用的数据库无关。
可能是最通用的解决方案,如果我可以从表面上看,该列包含如上所示的 1
或 0
- 是 min(IsTrue)
.
但有几点需要注意:
您要求 "bitwise" AND
,但您 描述 "logical" AND
- ,如果该列包含数字“1=TRUE 或 0=FALSE”,则相同;但在其他情况下可能只是有点相同。
有些数据库提供按位运算符,有些则不提供。而按位聚合函数则完全是另外一回事。这就是为什么 min
是一个更通用的解决方案;这是任何数据库都会提供的标准功能。它适用于多种情况,包括您似乎概述的情况。如果列类型在技术上是您的 DBMS 未定义 min
(或以某种奇怪的方式定义它)的列类型,它将失败。如果 negative 数字可以解释为 "true" ,它将失败(但在那种情况下,也许你可以用 min(abs(isTrue))
或类似的东西来解决)。
我有一个 table 看起来像这样(只有一个布尔字段):
| IsTrue |
---------------
| 1 |
---------------
| 1 |
---------------
| 0 |
---------------
| 1 |
---------------
有没有一种方法可以对这个字段中的所有值执行按位与运算,以便得到一个 True/False 结果?
类似于:select BITWISE_AND(IsTrue) from MyTable
的结果是 | 0 | ?
如果您的值只取 0 或 1,则 "bitwise and" 等同于 min()
:
select min(IsTrue) as "bitwise_and"
而"bitwise or"等同于max()
:
select max(IsTrue) as "bitwise_or"
这是一个数字事实,因此它与所使用的数据库无关。
可能是最通用的解决方案,如果我可以从表面上看,该列包含如上所示的 1
或 0
- 是 min(IsTrue)
.
但有几点需要注意:
您要求 "bitwise" AND
,但您 描述 "logical" AND
- ,如果该列包含数字“1=TRUE 或 0=FALSE”,则相同;但在其他情况下可能只是有点相同。
有些数据库提供按位运算符,有些则不提供。而按位聚合函数则完全是另外一回事。这就是为什么 min
是一个更通用的解决方案;这是任何数据库都会提供的标准功能。它适用于多种情况,包括您似乎概述的情况。如果列类型在技术上是您的 DBMS 未定义 min
(或以某种奇怪的方式定义它)的列类型,它将失败。如果 negative 数字可以解释为 "true" ,它将失败(但在那种情况下,也许你可以用 min(abs(isTrue))
或类似的东西来解决)。