BIT_AND 函数
BIT_AND 函数会对单个整数列或表达式中的所有值运行按位 AND 运算。此函数会聚合与表达式中的每个整数值对应的每个二进制值的每个位。
如果所有值中没有设置为 1 的位,则 BIT_AND 函数将返回结果 0
。如果所有值中的一个或多个位设置为 1,该函数返回一个整数值。此整数是对应于这些位的二进制值的数字。
例如,表中的一个列包含 4 个整数值:3、7、10 和 22。这些整数用二进制格式表示,如下所示:
整数 | 二进制值 |
---|---|
3 | 11 |
7 | 111 |
10 | 1010 |
22 | 10110 |
针对此数据集的 BIT_AND 操作发现所有位仅在倒数第二的位置设置为 1
。结果是一个二进制值 00000010
,它表示整数值 2
。因此,BIT_AND 函数返回 2
。
语法
BIT_AND ( [DISTINCT | ALL] expression )
参数
- expression
-
对其执行函数的目标列或表达式。此表达式必须具有 INT、INT2 或 INT8 数据类型。该函数返回等同的 INT、INT2 或 INT8 数据类型。
- DISTINCT | ALL
-
利用参数 DISTINCT,该函数可在计算结果之前消除指定表达式的所有重复值。利用参数 ALL,该函数可保留所有重复值。ALL 是默认值。有关更多信息,请参阅 按位聚合的 DISTINCT 支持。
示例
假定有意义的商业信息存储在整数列中,您可使用按位函数提取和聚合该信息。以下查询将 BIT_AND 函数应用于名为“USERLIKES”的表的 LIKES 列中并按 CITY 列对结果进行分组。
select city, bit_and(likes) from userlikes group by city order by city; city | bit_and --------------+--------- Los Angeles | 0 Sacramento | 0 San Francisco | 0 San Jose | 64 Santa Barbara | 192 (5 rows)
您可以将这些结果解释如下:
-
Santa Barbara 的整数值
192
转换为二进制值11000000
。换句话说,此城市中的所有用户都喜欢运动和戏剧,但并非所有用户都喜欢任何其他类型的活动。 -
整数
64
转换为01000000
。因此,对于圣荷西的所有用户来说,他们喜欢的唯一活动类型是戏剧。 -
其他三个城市的值
0
表示这些城市中的所有用户没有共同的“喜好”。