说明:
适用版本:TCHouse-X 内核版本 2.0.0及以上版本。
逻辑位运算符
此类函数通过比较两个整数对应的二进制位来计算结果。
函数 | 说明 | SQL 样例 | 结果 (二进制) |
bitwise_and(x, y) | 返回 x 和 y 的按位与结果 | SELECT bitwise_and(3, 5); | 1 (0011 & 0101 = 0001) |
bitwise_or(x, y) | 返回 x 和 y 的按位或结果 | SELECT bitwise_or(3, 5); | 7 (0011 | 0101 = 0111) |
bitwise_xor(x, y) | 返回 x 和 y 的按位异或结果 | SELECT bitwise_xor(3, 5); | 6 (0011 ^ 0101 = 0110) |
bitwise_not(x) | 返回 x 的按位非值 (NOT) | SELECT bitwise_not(0); | -1 |
位统计与提取
用于分析数值内部的 1 分布情况。
函数 | 说明 | SQL 样例 | 结果 |
bit_count(x) | 统计参数 x 中被设置为 1 的位数。 | SELECT bit_count(7); | 3(7 的二进制是 111,共有 3 个 "1"。) |
bit_get(x, pos) | 返回指定位置 pos 的位值(0 或 1)。 | SELECT bit_get(11, 3); | 1(11 二进制为 1011。第 3 位(从右往左,0 开始)是 1。) |
getbit(x, pos) | 同上 | SELECT getbit(11, 2); | 0(功能同上。第 2 位是 0。) |
注意:
bit_get 的 pos 不能超过类型的最大位数(如 INTEGER 是 31,BIGINT 是 63),否则会报错。位移操作
在底层算法中常用于快速乘、除以 2^n。
函数 | SQL 样例 | 结果 | 计算过程 |
shiftleft(x, n) | SELECT shiftleft(2, 2); | 8 | 2 (0010) 左移 2 位变为 8 (1000)。相当于 2 * (2^2)。 |
shiftright(x, n) | SELECT shiftright(8, 1); | 4 | 8 (1000) 右移 1 位变为 4 (0100)。相当于 8 / (2^1)。 |