本节介绍用于检查和操作 BITSTRING 值的函数和运算符。执行按位与 (AND)、或 (OR) 和异或 (XOR) 操作时,位串的长度必须相等。进行位移操作时,将保留字符串的原始长度。
位串运算符
下表显示了 BIT 类型可用的数学运算符。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
& |
按位与 (AND) | '10101'::BITSTRING & '10001'::BITSTRING |
10001 |
| |
按位或 (OR) | '1011'::BITSTRING | '0001'::BITSTRING |
1011 |
异或 (xor) |
按位异或 (XOR) | xor('101'::BITSTRING, '001'::BITSTRING) |
100 |
~ |
按位非 (NOT) | ~('101'::BITSTRING) |
010 |
<< |
按位左移 | '1001011'::BITSTRING << 3 |
1011000 |
>> |
按位右移 | '1001011'::BITSTRING >> 3 |
0001001 |
位字符串函数
下表显示了 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 |
位串聚合函数
这些聚合函数可用于 BIT 类型。
| 名称 | 描述 |
|---|---|
bit_and(arg) |
对给定表达式中的所有位串执行按位与 (AND) 操作。 |
bit_or(arg) |
对给定表达式中的所有位串执行按位或 (OR) 操作。 |
bit_xor(arg) |
对给定表达式中的所有位串执行按位异或 (XOR) 操作。 |
bitstring_agg(arg) |
返回一个位串,其中设置了 arg 中定义的每个不同位置的位。 |
bitstring_agg(arg, min, max) |
返回一个位串,其中设置了 arg 中定义的每个不同位置的位。所有位置必须在 [min, max] 范围内,否则将抛出 Out of Range Error(越界错误)。 |
bit_and(arg)
| 描述 | 对给定表达式中的所有位串执行按位与 (AND) 操作。 |
| 示例 | bit_and(A) |
bit_or(arg)
| 描述 | 对给定表达式中的所有位串执行按位或 (OR) 操作。 |
| 示例 | bit_or(A) |
bit_xor(arg)
| 描述 | 对给定表达式中的所有位串执行按位异或 (XOR) 操作。 |
| 示例 | bit_xor(A) |
bitstring_agg(arg)
| 描述 | bitstring_agg 函数接受任何整数类型作为输入,并返回一个位串,其中为每个不同的值设置了位。最左边的位代表列中的最小值,最右边的位代表最大值。如果可能,将从列统计信息中检索最小值和最大值。否则,也可以手动提供最小值和最大值。 |
| 示例 | bitstring_agg(A) |
提示:
bit_count和bitstring_agg的组合可用作count(DISTINCT ...)的替代方案,在低基数和密集值的情况下可能会提高性能。
bitstring_agg(arg, min, max)
| 描述 | 返回一个位串,其中设置了 arg 中定义的每个不同位置的位。所有位置必须在 [min, max] 范围内,否则将抛出 Out of Range Error(越界错误)。 |
| 示例 | bitstring_agg(A, 1, 42) |