跳到主要内容

Bitstring 函数

本节介绍用于检查和操作 BITSTRING 值的函数和运算符。 执行按位 AND、OR、XOR 运算时,位串长度必须一致。进行位移时,会保留原始位串长度。

Bitstring 运算符

下表展示了 BIT 类型可用的运算符。

运算符描述示例结果
&按位与'10101'::BITSTRING & '10001'::BITSTRING10001
``按位或`'1011'::BITSTRING
xor按位异或xor('101'::BITSTRING, '001'::BITSTRING)100
~按位取反~('101'::BITSTRING)010
<<按位左移'1001011'::BITSTRING << 31011000
>>按位右移'1001011'::BITSTRING >> 30001001

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。最左侧位表示列中的最小值,最右侧位表示最大值。如果可能,会从列统计信息中获取最小值和最大值;否则也可以手动提供 minmax。 | | 示例 | bitstring_agg(A) |

提示:bit_countbitstring_agg 的组合可作为 count(DISTINCT ...) 的替代方案,在低基数且值分布密集的场景中可能带来性能提升。

bitstring_agg(arg, min, max)

| 描述 | 返回一个位串,对 arg 定义的每个不同位置将对应位设为 1。所有位置必须位于 [min, max] 范围内,否则会抛出 Out of Range Error。 | | 示例 | bitstring_agg(A, 1, 42) |