ビット単位関数

bit_count(x, bits) -> bigint()

x ( bitsビット符号付き整数として扱われる) に設定されているビットの数を2の補数表現でカウントします。

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 のビット単位のANDを2の補数表現で返します。

bitwise_not(x) -> bigint()

x のビット単位のNOTを2の補数表現で返します。

bitwise_or(x, y) -> bigint()

xy のビット単位のORを2の補数表現で返します。

bitwise_xor(x, y) -> bigint()

xy のビット単位のXORを2の補数表現で返します。

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()

xshift だけ算術右シフトする演算で、2の補数表現を使用します。

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

汎用シフト関数

これらの3つの関数は、整数値型の値 TINYINTSMALLINTINTEGERBIGINT を受け取り、shift で指定された量だけシフトし、同じ整数型の値を返します。3つの関数すべてにおいて、シフト量は shift パラメータの下位ビットによって決まり、shift パラメータの上位ビットは無視されます。

bitwise_left_shift(value, shift) -> [valueと同じ型]()

value を左にシフトした値を返します。

SELECT bitwise_left_shift(TINYINT '7', 2); -- 28
SELECT bitwise_left_shift(TINYINT '-7', 2); -- -28
bitwise_right_shift(value, shift) -> [valueと同じ型]()

value を論理右にシフトした値を返します。

SELECT bitwise_right_shift(TINYINT '7', 2); -- 1
SELECT bitwise_right_shift(SMALLINT -8, 2); -- 16382
bitwise_right_shift_arithmetic(value, shift) -> [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() も参照してください。