社區版PostgreSQL內建的varbit外掛程式僅支援的比較簡單的BIT類型操作函數,阿里雲RDS PostgreSQL對varbit外掛程式進行了擴充,支援更多的BIT操作,可以覆蓋更多應用情境,例如即時使用者畫像推薦系統、門禁廣告系統、購票系統等。
前提條件
RDS PostgreSQL版本如下:- 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函數