位元函數

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 的位元 AND 結果。

bitwise_not(x) -> bigint()

傳回以二補數表示法表示的 x 的位元 NOT 結果。

bitwise_or(x, y) -> bigint()

傳回以二補數表示法表示的 xy 的位元 OR 結果。

bitwise_xor(x, y) -> bigint()

傳回以二補數表示法表示的 xy 的位元 XOR 結果。

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) -> [與值相同]()

傳回 value 的左移值

SELECT bitwise_left_shift(TINYINT '7', 2); -- 28
SELECT bitwise_left_shift(TINYINT '-7', 2); -- -28
bitwise_right_shift(value, shift) -> [與值相同]()

傳回 value 的邏輯右移值

SELECT bitwise_right_shift(TINYINT '7', 2); -- 1
SELECT bitwise_right_shift(SMALLINT -8, 2); -- 16382
bitwise_right_shift_arithmetic(value, shift) -> [與值相同]()

傳回 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()位元彙總函數中。