Postgresql 中文操作指南

9.6. Bit String Functions and Operators #

本节介绍用于检查和操作位串的函数和运算符,即类型为 _bit_和 _bit varying_的值。(虽然这些表中只提到了 _bit_类型,但可以使用 _bit varying_类型的值交替使用。)位串支持 Table 9.1中显示的常规比较运算符,以及 Table 9.14中显示的运算符。

Table 9.14. Bit String Operators

Operator

Description

Example(s)

bit _

_ bitbit

Concatenation

_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

Table 9.15中显示的某些可用于二进制串的函数也可用于位串。

Table 9.15. Bit String Functions

Function

Description

Example(s)

bit_count ( bit ) → bigint 返回位串中设置的位数(也称为“位计数”)。 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 替换 bits 的从第 start 位开始并延伸 count 位的子串为 newsubstring 。如果省略 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 位开始的子串,如果指定,则在 count 位后停止。至少提供一个 startcountsubstring(B'110010111111' from 3 for 2)00

get_bitbits bit , n integer )→ integer 从位串中提取第 n 位;第一个(最左边的)位是位 0。 get_bit(B'101010101010101010', 6)1

set_bitbits bit , n integer , newvalue integer )→ bit 将位串中的第 n 位设为 newvalue ;第一个(最左边的)位是位 0。 set_bit(B'101010101010101010', 6, 0)101010001010101010

另外,可以将整数值强制转换为 bit(n) 类型或从 bit(n) 类型强制转换。将整数强制转换为 n 会复制最右边的 bit(1) 个比特。将整数强制转换为比整数自身更宽的比特串宽度将会在左侧扩展变量。一些示例:

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

请注意,仅强制转换为“bit”表示强制转换为 amcostestimate,因此只会传递整数的最低有效位。