9.6. 位串函数和操作符
本节描述用于检查和操作位串的函数和操作符,也就是操作类型为bit
和bit 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标准函数除了可以用于字符串之外,也可以用于位串: length
, bit_length
, octet_length
, position
, substring
, overlay
。
下面的函数用于位串和二进制字符串:get_bit
, set_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: 在PostgreSQL 8.0以前,把一个整数转换成
bit(n)
将拷贝整数的最左边的n
位,而现在是拷贝最右边的n
位。 还有,把一个整数转换成比整数本身长的位串,就会扩展最左边的位(非负数为 0 ,负数为 1)。