2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不受支持的版本: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

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

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

表 9.14. 位字符串运算符

运算符

描述

示例

bit || bitbit

连接

B'10001' || B'011'10001011

bit & bitbit

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

B'10001' & B'01101'00001

bit | bitbit

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

B'10001' | B'01101'11101

bit # bitbit

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

B'10001' # B'01101'11100

~ bitbit

按位非

~ B'10001'01110

bit << integerbit

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

B'10001' << 301000

bit >> integerbit

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

B'10001' >> 200100


一些可用于二进制字符串的函数也可用于位字符串,如表 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

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

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

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

提取 bits 的子字符串,如果指定了 start,则从第 start 个位开始,如果指定了 count,则在 count 个位后停止。至少提供 startcount 中的一个。

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),因此只会提供整数的最低有效位。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表单报告文档问题。