Skip to content

9.6. 位字符串函数和运算符# ​

本节介绍用于检查和操作位字符串的函数和运算符,即类型bit和bit varying的值。(虽然这些表中只提到了类型bit,但类型bit varying的值也可以互换使用。)位字符串支持表 9.1中所示的常用比较运算符,以及表 9.14中所示的运算符。

表 9.14. 位字符串运算符

运算符

说明

示例

bit || bit → bit

连接

B'10001' || B'011' → 10001011

bit & bit → bit

按位 AND(输入必须等长)

B'10001' & B'01101' → 00001

bit | bit → bit

按位 OR(输入必须等长)

B'10001' | B'01101' → 11101

bit # bit → bit

按位异或(输入必须等长)

B'10001' # B'01101' → 11100

~ bit → bit

按位 NOT

~ B'10001' → 01110

bit << integer → bit

按位左移(字符串长度不变)

B'10001' << 3 → 01000

bit >> integer → bit

按位右移(字符串长度不变)

B'10001' >> 2 → 00100

如表 9.15所示,二进制字符串的一些可用函数也适用于位字符串。

表 9.15 位字符串函数

函数

说明

示例

bit_count ( bit ) → bigint

返回位字符串中设置的位数(也称为 “popcount”)。

bit_count(B'10111') → 4

bit_length ( bit ) → integer

返回位字符串中的位数。

bit_length(B'10111') → 5

length ( bit ) → integer

返回位字符串中的位数。

length(B'10111') → 5

octet_length ( bit ) → integer

返回位字符串中的字节数。

octet_length(B'1011111011') → 2

overlay ( bits bit PLACING newsubstring bit FROM start integer [ FOR count integer ] ) → bit

用 newsubstring 替换从第 start 位开始并延伸 count 位的 bits 子字符串。如果省略 count,则默认为 newsubstring 的长度。

overlay(B'01010101010101010' placing B'11111' from 2 for 3) → 0111110101010101010

position ( substring bit IN bits bit ) → integer

返回指定的 substring 在 bits 中的第一个起始索引,如果不存在,则返回零。

position(B'010' in B'000001101011') → 8

substring ( bits bit [ FROM start integer ] [ FOR count integer ] ) → bit

提取 bits 的子字符串,从 start'第位比特开始(如果指定),并在 count 比特后停止(如果指定)。至少提供 start 和 count 中的一个。

substring(B'110010111111' from 3 for 2) → 00

get_bit ( bits bit, n integer ) → integer

从比特串中提取第 n 位比特;第一位(最左位)是第 0 位比特。

get_bit(B'101010101010101010', 6) → 1

set_bit ( bits bit, n integer, newvalue integer ) → bit

将比特串中的第 n 位比特设置为 newvalue;第一位(最左位)是第 0 位比特。

set_bit(B'101010101010101010', 6, 0) → 101010001010101010

此外,还可以将整数值转换为bit类型并从中转换。将整数转换为bit(n)会复制最右边的n位比特。将整数转换为比整数本身宽度更大的比特串将在左侧进行符号扩展。一些示例

44::bit(10)                    0000101100
44::bit(3)                     100
cast(-44 as bit(12))           111111010100
'1110'::bit(4)::integer        14

请注意,仅转换为“bit”意味着转换为bit(1),因此只会提供整数的最低有效位。