文字
分享

9.6. 位串函数和操作符

本节描述用于检查和操作位串的函数和操作符,也就是操作类型为bitbit varying 值的函数和操作符。除了常用的比较操作符之外,还可以使用Table 9-10显示的 操作符&|#的位串操作数必须等长。在移位的时候,保留原始的位串长度(并以0填充),如例所示。

Table 9-10. 位串操作符

操作符 描述 示例 结果
|| 连接 B'10001' || B'011' 10001011
& 位与 B'10001' & B'01101' 00001
| 位或 B'10001' | B'01101' 11101
# 位异或 B'10001' # B'01101' 11100
~ 位非 ~ B'10001' 01110
<< 位左移 B'10001' << 3 01000
>> 位右移 B'10001' >> 2 00100

下面的SQL标准函数除了可以用于字符串之外, 也可以用于位串:lengthbit_lengthoctet_lengthpositionsubstringoverlay

下面的函数使用位串以及二进制字符串: get_bitset_bit。 当用于位串时,这些函数位数从字符串(最左边)的第一位作为0位 。

另外,我们可以在整数和bit之间来回转换。一些例子:

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

请注意,只是转换为"bit"的意思是转换成bit(1),因此只会转换成整数的最低位。

Note: PostgreSQL8.0以前,把一个整数转换成bit(n) 将拷贝整数的最左边的n位,而现在是拷贝最右边的n位。 还有,把一个整数转换成比整数本身长的位串,就会扩展最左边的位(非负数为0,负数为1)。