Bitwise Functions
bit_count(x, bits) → bigint
Count the number of bits set in x
(treated as bits
-bit signed integer) in 2’s complement representation:
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
Returns the bitwise AND of x
and y
in 2’s complement representation.
bitwise_not(x) → bigint
Returns the bitwise NOT of x
in 2’s complement representation.
bitwise_or(x, y) → bigint
Returns the bitwise OR of x
and y
in 2’s complement representation.
bitwise_xor(x, y) → bigint
Returns the bitwise XOR of x
and y
in 2’s complement representation.
bitwise_shift_left(x, shift, bits) → bigint
Left shift operation on x
(treated as bits
-bit integer) shifted by 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
Logical right shift operation on x
(treated as bits
-bit integer) shifted by 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
Arithmetic right shift operation on x
shifted by shift
in 2’s complement representation:
SELECT bitwise_arithmetic_shift_right(-8, 2); -- -2
SELECT bitwise_arithmetic_shift_right(7, 2); -- 1
Generic Shift Functions
These three functions accept values of integral value types TINYINT
, SMALLINT
, INTEGER
and BIGINT
, and shift them by the amount given by shift
, returning a value of the same integral type. For all three functions, the amount to shift is given by the bottom bits of the shift
parameter, and higher bits of the shift
parameter are ignored.
bitwise_left_shift(value, shift) → [same as value]
Returns the left shifted value of value
:
SELECT bitwise_left_shift(TINYINT '7', 2); -- 28
SELECT bitwise_left_shift(TINYINT '-7', 2); -- -28
bitwise_right_shift(value, shift, digits) → [same as value]
Returns the logical right shifted value of 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]
Returns the arithmetic right shifted value of value
:
SELECT bitwise_right_shift_arithmetic(BIGINT '-8', 2); -- -2
SELECT bitwise_right_shift_arithmetic(SMALLINT '7', 2); -- 1
See also bitwise_and_agg() and bitwise_or_agg().