位串函数和操作符
位串函数和操作符¶
本节描述用于检查和操作位串的函数和操作符,也就是操作类型为bit
和bit varying
的值的函数和操作符。除了常用的比较操作符之外,还可以使用位串操作符里显示的操作符。&
、|
和#
的位串操作数必须等长。在移位的时候,保留原始的位串的的长度,如例子所示。
位串操作符¶
||
¶
- 操作符
||
- 描述
- 连接
- 示例
- ``` sql
seaboxsql=# select B'10001' || B'011';
?column?
10001011 (1 row) ```
&
¶
- 操作符
&
- 描述
- 按位与
- 示例
- ``` sql
seaboxsql=# select B'10001' & B'01101';
?column?
00001 (1 row) ```
|
¶
- 操作符
|
- 描述
- 按位或
- 示例
- ``` sql
seaboxsql=# select B'10001' | B'01101';
?column?
11101 (1 row) ```
#
¶
- 操作符
#
- 描述
- 按位异或
- 示例
- ``` sql
seaboxsql=# select B'10001' # B'01101';
?column?
11100 (1 row) ```
~
¶
- 操作符
~
- 描述
- 按位求反
- 示例
- ``` sql
seaboxsql=# select ~ B'10001';
?column?
01110 (1 row) ```
<<
¶
- 操作符
<<
- 描述
- 按位左移
- 示例
- ``` sql
seaboxsql=# select B'10001' << 3;
?column?
01000 (1 row) ```
>>
¶
- 操作符
>>
- 描述
- 按位右移
- 示例
- ``` sql
seaboxsql=# select B'10001' >> 2;
?column?
00100 (1 row) ```
下面的SQL标准函数除了可以用于字符串之外,也可以用于位串:length
、 bit_length
、 octet_length
、position
、 substring
、 overlay
。
下面的函数除了可以用于二进制串之外,也可以用于位串:get_bit
、set_bit
。当使用于一个位串时,这些函数将串的第一(最左)位计数为位0。
另外,我们可以在整数和bit
之间来回转换。一些例子:
seaboxsql=# select 44::bit(10);
bit
------------
0000101100
(1 row)
seaboxsql=# select 44::bit(3);
bit
-----
100
(1 row)
seaboxsql=# select cast(-44 as bit(12));
bit
--------------
111111010100
(1 row)
seaboxsql=# select '1110'::bit(4)::integer;
int4
------
14
(1 row)
请注意,如果只是转换为“bit”,意思是转换成bit(1)
,因此只会转换整数的最低有效位。
注意
- 把一个整数转换成
bit(n)
将拷贝整数的最右边的n
位。 把一个整数转换成比整数本身长的位串,就会在最左边扩展符号。