↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0
预发布版本文档。 PostgreSQL 19beta4 为测试版本,最终发布内容可能有所不同。

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

按位与(输入的长度必须相等)

B'10001' & B'01101' → 00001

bit | bit → bit

按位或(输入的长度必须相等)

B'10001' | B'01101' → 11101

bit # bit → bit

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

B'10001' # B'01101' → 11100

~ bit → bit

按位非

~ 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 替换 bits 中从第 start 位开始、长度为 count 位的子串。如果省略 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),因此只会得到该整数的最低有效位。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.