ビット単位関数¶
- 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()¶
x
とy
のビット単位のANDを2の補数表現で返します。
- bitwise_not(x) -> bigint()¶
x
のビット単位のNOTを2の補数表現で返します。
- bitwise_or(x, y) -> bigint()¶
x
とy
のビット単位のORを2の補数表現で返します。
- bitwise_xor(x, y) -> bigint()¶
x
とy
のビット単位の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()¶
x
をshift
だけ算術右シフトする演算で、2の補数表現を使用します。SELECT bitwise_arithmetic_shift_right(-8, 2); -- -2 SELECT bitwise_arithmetic_shift_right(7, 2); -- 1
汎用シフト関数¶
これらの3つの関数は、整数値型の値 TINYINT
、SMALLINT
、INTEGER
、BIGINT
を受け取り、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()
も参照してください。