🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 9.6\. 位串函数和操作符 本节描述用于检查和操作位串的函数和操作符,也就是操作类型为`bit` 和`bit varying`值的函数和操作符。除了常用的比较操作符之外, 还可以使用[Table 9-10](#calibre_link-2085)里显示的操作符。 `&`, `|`,`#` 的位串操作数必须等长。在移位的时候,保留原始的位串长度(并以 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)。