GoogleSQL for Spanner supports the following bit functions.
Function list
| Name | Summary |
|---|---|
BIT_AND
|
Performs a bitwise AND operation on an expression.
For more information, see Aggregate functions. |
BIT_COUNT
|
Gets the number of bits that are set in an input expression. |
BIT_OR
|
Performs a bitwise OR operation on an expression.
For more information, see Aggregate functions. |
BIT_REVERSE
|
Reverses the bits in an integer. |
BIT_XOR
|
Performs a bitwise XOR operation on an expression.
For more information, see Aggregate functions. |
BIT_COUNT
BIT_COUNT(expression)
Description
The input, expression, must be an
integer or BYTES.
Returns the number of bits that are set in the input expression.
For signed integers, this is the number of bits in two's complement form.
Return Data Type
INT64
Example
SELECT a, BIT_COUNT(a) AS a_bits, FORMAT("%T", b) as b, BIT_COUNT(b) AS b_bits
FROM UNNEST([
STRUCT(0 AS a, b'' AS b), (0, b'\x00'), (5, b'\x05'), (8, b'\x00\x08'),
(0xFFFF, b'\xFF\xFF'), (-2, b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE'),
(-1, b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF'),
(NULL, b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF')
]) AS x;
/*-------+--------+---------------------------------------------+--------*
| a | a_bits | b | b_bits |
+-------+--------+---------------------------------------------+--------+
| 0 | 0 | b"" | 0 |
| 0 | 0 | b"\x00" | 0 |
| 5 | 2 | b"\x05" | 2 |
| 8 | 1 | b"\x00\x08" | 1 |
| 65535 | 16 | b"\xff\xff" | 16 |
| -2 | 63 | b"\xff\xff\xff\xff\xff\xff\xff\xfe" | 63 |
| -1 | 64 | b"\xff\xff\xff\xff\xff\xff\xff\xff" | 64 |
| NULL | NULL | b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" | 80 |
*-------+--------+---------------------------------------------+--------*/
BIT_REVERSE
BIT_REVERSE(value, preserve_sign)
Description
Takes an integer value and returns its bit-reversed version. When
preserve_sign is TRUE, this function provides the same bit-reversal
algorithm used in bit-reversed sequence. For more information, see
Bit-reversed sequence.
If the input value is NULL, the function returns NULL.
Arguments:
value: The integer to bit reverse.Sequenceonly supportsINT64.preserve_sign:TRUEto exclude the sign bit, otherwiseFALSE.
Return Data Type
The same data type as value.
Example
SELECT BIT_REVERSE(100, true) AS results
/*---------------------*
| Results |
+---------------------+
| 1369094286720630784 |
*---------------------*/
SELECT BIT_REVERSE(100, false) AS results
/*---------------------*
| Results |
+---------------------+
| 2738188573441261568 |
*---------------------*/
SELECT BIT_REVERSE(-100, true) AS results
/*----------------------*
| Results |
+----------------------+
| -7133701809754865665 |
*----------------------*/
SELECT BIT_REVERSE(-100, false) AS results
/*---------------------*
| Results |
+---------------------+
| 4179340454199820287 |
*---------------------*/