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