位运算函数

bit_count(x, bits) -> bigint()

计算 x 中设置的位数(视为 bits 位有符号整数)在二进制补码表示中的数量。

SELECT bit_count(9, 64); -- 2
SELECT bit_count(9, 8); -- 2
SELECT bit_count(-7, 64); -- 62
SELECT bit_count(-7, 8); -- 6
bitwise_and(x, y) -> bigint()

返回 xy 在二进制补码表示中的按位与运算结果。

bitwise_not(x) -> bigint()

返回 x 在二进制补码表示中的按位非运算结果。

bitwise_or(x, y) -> bigint()

返回 xy 在二进制补码表示中的按位或运算结果。

bitwise_xor(x, y) -> bigint()

返回 xy 在二进制补码表示中的按位异或运算结果。

bitwise_shift_left(x, shift, bits) -> bigint()

x(视为 bits 位整数)执行左移操作,移动 shift 位。

SELECT bitwise_shift_left(7, 2, 4); -- 12
SELECT bitwise_shift_left(7, 2, 64); -- 28
bitwise_logical_shift_right(x, shift, bits) -> bigint()

x(视为 bits 位整数)执行逻辑右移操作,移动 shift 位。

SELECT bitwise_logical_shift_right(7, 2, 4); -- 1
SELECT bitwise_logical_shift_right(-8, 2, 5); -- 6
bitwise_arithmetic_shift_right(x, shift) -> bigint()

x 执行算术右移操作,在二进制补码表示中移动 shift 位。

SELECT bitwise_arithmetic_shift_right(-8, 2); -- -2
SELECT bitwise_arithmetic_shift_right(7, 2); -- 1

通用移位函数

这三个函数接受整数值类型 TINYINTSMALLINTINTEGERBIGINT 的值,并将它们移动 shift 指定的位数,返回相同整数值类型的值。对于所有三个函数,移动的位数由 shift 参数的最低位给出,shift 参数的较高位被忽略。

bitwise_left_shift(value, shift) -> [same as value]()

返回 value 的左移值。

SELECT bitwise_left_shift(TINYINT '7', 2); -- 28
SELECT bitwise_left_shift(TINYINT '-7', 2); -- -28
bitwise_right_shift(value, shift) -> [same as value]()

返回 value 的逻辑右移值。

SELECT bitwise_right_shift(TINYINT '7', 2); -- 1
SELECT bitwise_right_shift(SMALLINT -8, 2); -- 16382
bitwise_right_shift_arithmetic(value, shift) -> [same as value]()

返回 value 的算术右移值。

SELECT bitwise_right_shift_arithmetic(BIGINT '-8', 2); -- -2
SELECT bitwise_right_shift_arithmetic(SMALLINT '7', 2); -- 1

另请参见 位运算聚合函数 中的 bitwise_and_agg()bitwise_or_agg()