全部產品
Search
文件中心

ApsaraDB RDS:位元影像功能擴充(varbitx)

更新時間:Jun 19, 2024

社區版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。

例如: get_bit('111110000011', 3, 5)返回11000。

set_bit_array (varbit a, int b, int c, int[] d) returns varbit 將下標位置數組d對應的BIT位設定為b(0或1),超出原始長度的部分填充c(0或1)。

例如: set_bit_array('111100001111', 0, 1, array[1,15])返回 1011000011111110。

bit_count (varbit a, int b, int c, int d) returns int從第c位開始,統計d個BIT位中有多少個b(0或1),如果超出長度,則只計算已經存在的。

例如:bit_count('1111000011110000', 1, 5, 4)返回1(0001)。

bit_count (varbit a, int b) returns int 統計b(1或0)的個數。

例如:bit_count('1111000011110000', 1)返回8。

bit_fill (int a, int b) returns varbit填充b長度的a(0或1)。

例如:bit_fill(0,10)返回 0000000000。

bit_rand (int a, int b, float c) returns varbit填充a長度的隨機BIT,並指定b(0或1)的隨機比例c。

例如:bit_rand(10, 1, 0.3)可能返回0101000001。

bit_posite (varbit a, int b, boolean c) returns int[]返回b(0或1)的下標位置數組,下標從0開始計數,c為true時正向返回,c為false時反向返回。

例如:bit_posite ('11110010011', 1, true)返回 [0,1,2,3,6,9,10],bit_posite ('11110010011', 1, false)返回 [10,9,6,3,2,1,0]。

bit_posite (varbit a, int b, int c, boolean d) returns int[]返回b(0或1)的下標位置數組,返回c個為止,下標從0開始計數,d為true時正向返回,d為false時反向返回。

例如:bit_posite ('11110010011', 1, 3, true)返回 [0,1,2],bit_posite ('11110010011', 1, 3, false)返回 [10,9,6]。

get_bit_array (varbit a, int b, int c, int d) returns int[]從b位置開始擷取c個BIT位,返回d(0或1)的下標位置數組。

例如: get_bit_array('111110000011', 3, 5, 1)返回11000的下標array[3,4]。

get_bit_array (varbit a, int b, int[] c) returns int[]查詢指定下標位置數組c對應的BIT位為b(0或1)的,返回下標位置數組,超出部分的下標不統計。

例如: get_bit_array('111110000011', 1, array[1,5,6,7,10,11])返回array[1,10,11]。

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('111100001111', 1, 0, array[4,5,6,7], 2)返回111111001111(設定為1,超出補0,設定滿2位即返回)。

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('111100001111', 0, 1, array[1,15])返回1011000011111110(設定為0,超出補1)同時返回array[1,15]。

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的下標位置數組。

例如:set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2)返回111111001111(設定為1,超出補0,設定成功2位即返回)同時返回array[4,5](array[1]本身為1,未設定成功)。

bit_count_array (varbit a, int b, int[] c) returns int統計指定下標位置數組中0或1的個數。

例如: bit_count_array('1111000011110000', 1, array[1,2,7,8])返回3。

使用方法

  • 建立外掛程式
    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)

    具體函數及說明請參見函數說明