Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

9.6. 位串函数和运算符 #

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

表 9.14. 位串运算符

运算符

说明

示例

bit || bitbit

串联

B'10001' || B'011'10001011

bit & bitbit

按位 AND(输入必须等长)

B'10001' & B'01101'00001

bit | bitbit

按位 OR(输入必须等长)

B'10001' | B'01101'11101

bit # bitbit

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

B'10001' # B'01101'11100

~ bitbit

按位 NOT

~ 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_length(B'10111')5

length ( ) → 整数

位串中的位数。

length(B'10111')5

octet_length ( ) → 整数

位串中的字节数。

octet_length(B'1011111011')2

overlay ( 插入 新子串 开始 整数 [ 对于 计数 整数 ] ) →

新子串 替换从 开始 位开始并且扩展 计数 位的 中的子串。如果省略 计数,则默认为 新子串 的长度。

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

position ( 子串 ) → 整数

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

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

substring ( [ 开始 整数 ] [ 对于 计数 整数 ] ) →

如果已指定,则提取从 开始的 bits 子字符串,并在 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),因此只会提供整数的最低有效位。