社区版PostgreSQL内置的varbit插件仅支持的比较简单的BIT类型操作函数,阿里云RDS PostgreSQL对varbit插件进行了扩展,支持更多的BIT操作,可以覆盖更多应用场景,例如实时用户画像推荐系统、门禁广告系统、购票系统等。
前提条件
- PostgreSQL 11
- PostgreSQL 10
函数说明
函数 | 说明 |
---|---|
get_bit (varbit a, int b, int c) returns varbit |
从指定位置b开始获取c个BIT位,返回varbit。
例如: |
set_bit_array (varbit a, int b, int c, int[] d) returns varbit |
将下标位置数组d对应的BIT位设置为b(0或1),超出原始长度的部分填充c(0或1)。
例如: |
bit_count (varbit a, int b, int c, int d) returns int |
从第c位开始,统计d个BIT位中有多少个b(0或1),如果超出长度,则只计算已经存在的。
例如: |
bit_count (varbit a, int b) returns int |
统计b(1或0)的个数。
例如: |
bit_fill (int a, int b) returns varbit |
填充b长度的a(0或1)。
例如: |
bit_rand (int a, int b, float c) returns varbit |
填充a长度的随机BIT,并指定b(0或1)的随机比例c。
例如: |
bit_posite (varbit a, int b, boolean c) returns int[] |
返回b(0或1)的下标位置数组,下标从0开始计数,c为true时正向返回,c为false时反向返回。
例如: |
bit_posite (varbit a, int b, int c, boolean d) returns int[] |
返回b(0或1)的下标位置数组,返回c个为止,下标从0开始计数,d为true时正向返回,d为false时反向返回。
例如: |
get_bit_array (varbit a, int b, int c, int d) returns int[] |
从b位置开始获取c个BIT位,返回d(0或1)的下标位置数组。
例如: |
get_bit_array (varbit a, int b, int[] c) returns int[] |
查询指定下标位置数组c对应的BIT位为b(0或1)的,返回下标位置数组,超出部分的下标不统计。
例如: |
set_bit_array (varbit a, int b, int c, int[] d, int e) returns varbit |
将指定下标位置数组d对应的BIT位设置为b(0或1),设置e位即返回,超出原始长度的部分填充c(0或1)。
例如: |
set_bit_array_record (varbit a, int b, int c, int[] d) returns (varbit,int[]) |
将指定下标位置数组d对应的BIT位设置为b(0或1),超出原始长度的部分填充c(0或1),返回设置后的varbit,同时返回此次操作中被设置为b的下标位置数组。
例如: |
set_bit_array_record (varbit a, int b, int c, int[] d, int e) returns (varbit,int[]) |
将指定下标位置数组d对应的BIT位设置为b(0或1),超出原始长度的部分填充c(0或1),设置成功e位即返回,返回设置后的varbit,同时返回此次操作被设置为b的下标位置数组。
例如: |
bit_count_array (varbit a, int b, int[] c) returns int |
统计指定下标位置数组中0或1的个数。
例如: |
使用方法
- 创建插件
CREATE EXTENSION varbitx;
- 删除插件
DROP EXTENSION varbitx;
- 函数使用命令
使用
select <函数>
即可,例如:- bit_count函数
select bit_count('1111000011110000', 1, 5, 4);
返回结果为:
bit_count ----------- 1 (1 row)
- set_bit_array_record函数
select set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2);
返回结果为:
set_bit_array_record ------------------------ (111111001111,"{4,5}") (1 row)
具体函数及说明请参见函数说明。
- bit_count函数