Documentation
/ SQL
/ Functions
Bitstring Functions
本节介绍用于检查和操作BITSTRING值的函数和运算符。
在执行按位操作数AND、OR和XOR时,位字符串必须具有相同的长度。在进行位移操作时,字符串的原始长度保持不变。
下表显示了可用于BIT类型的数学运算符。
| Operator |
Description |
Example |
Result |
& |
按位与 |
'10101'::BITSTRING & '10001'::BITSTRING |
10001 |
| |
按位或 |
'1011'::BITSTRING | '0001'::BITSTRING |
1011 |
xor |
按位异或 |
xor('101'::BITSTRING, '001'::BITSTRING) |
100 |
~ |
按位取反 |
~('101'::BITSTRING) |
010 |
<< |
按位左移 |
'1001011'::BITSTRING << 3 |
1011000 |
>> |
按位右移 |
'1001011'::BITSTRING >> 3 |
0001001 |
下表显示了可用于BIT类型的标量函数。
| 描述 |
返回位串中设置的位数。 |
| 示例 |
bit_count('1101011'::BITSTRING) |
| 结果 |
5 |
| 描述 |
返回位串中的位数。 |
| 示例 |
bit_length('1101011'::BITSTRING) |
| 结果 |
7 |
| 描述 |
返回指定子字符串在比特中的第一个起始索引,如果不存在则返回零。第一个(最左边的)比特的索引为1 |
| 示例 |
bit_position('010'::BITSTRING, '1110101'::BITSTRING) |
| 结果 |
4 |
| 描述 |
返回一个确定长度的位串。 |
| 示例 |
bitstring('1010'::BITSTRING, 7) |
| 结果 |
0001010 |
| 描述 |
从位串中提取第n位;第一位(最左边)的索引为0。 |
| 示例 |
get_bit('0110010'::BITSTRING, 2) |
| 结果 |
1 |
| 描述 |
bit_length 的别名。 |
| 示例 |
length('1101011'::BITSTRING) |
| Result |
7 |
| 描述 |
返回位串中的字节数。 |
| 示例 |
octet_length('1101011'::BITSTRING) |
| 结果 |
1 |
| 描述 |
将位串中的第n位设置为新值;第一位(最左边)的索引为0。返回一个新的位串。 |
| 示例 |
set_bit('0110010'::BITSTRING, 2, 0) |
| 结果 |
0100010 |
这些聚合函数可用于 BIT 类型。
| 描述 |
返回对给定表达式中所有位串执行的按位与操作。 |
| 示例 |
bit_and(A) |
| 描述 |
返回对给定表达式中所有位串执行的按位或操作。 |
| 示例 |
bit_or(A) |
| 描述 |
返回对给定表达式中所有位串执行的按位异或操作。 |
| 示例 |
bit_xor(A) |
| 描述 |
bitstring_agg 函数接受任何整数类型作为输入,并返回一个位串,其中为每个不同的值设置了位。最左边的位表示列中的最小值,最右边的位表示最大值。如果可能,最小值和最大值将从列统计信息中获取。否则,也可以提供最小值和最大值。 |
| 示例 |
bitstring_agg(A) |
提示 结合使用 bit_count 和 bitstring_agg 可以作为 count(DISTINCT ...) 的替代方案,在基数低且值密集的情况下可能带来性能提升。
| 描述 |
返回一个位字符串,其中为arg中定义的每个不同位置设置了位。所有位置必须在[min, max]范围内,否则将抛出Out of Range Error。 |
| 示例 |
bitstring_agg(A, 1, 42) |