すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:varbitxプラグインの使用

最終更新日:Jan 11, 2024

PostgreSQL Communityエディションで提供されているvarbitプラグインは、単純なBITタイプの操作関数のみをサポートします。 varbitxプラグインは、varbitプラグインの拡張です。 varbitxプラグインはApsaraDB RDS for PostgreSQLで提供され、より多くのシナリオでより多くのBITタイプの操作をサポートします。 これらのシナリオには、リアルタイムのユーザープロファイルの推奨、アクセス制御広告、および発券が含まれます。

前提条件

RDSインスタンスは、次のPostgreSQLバージョンのいずれかを実行します。
  • PostgreSQL 11
  • PostgreSQL 10

サポートされる関数

関数説明
get_bit (varbit a、int b、int c) はvarbitを返します位置bで始まる指定された数cのビットを取得し、VARBITタイプの文字列を返します。

たとえば、get_bit('111110000011', 3,5) は11000を返します。

set_bit_array (varbit a, int b, int c, int[] d) returns varbit下付き文字列dで指定されたビットの値を値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指定されたビット数dのうち、位置cから始まる値b (0または1) の数をカウントします。 指定された長さを超えるビットはカウントされません。

たとえば、bit_count('1111000011110000', 1, 5, 4) は1を返します。

bit_count (varbit a, int b) returns int値b (0または1) の総数をカウントします。

たとえば、bit_count('1111000011110000', 1) は8を返します。

bit_fill (int a、int b) はvarbitを返します指定された数bのビットを値a (0または1) で埋めます。

たとえば、bit_fill(0,10) は0000000000を返します。

bit_rand (int a、int b、float c) はvarbitを返します指定されたビット数aからランダムな割合cのビットを取得し、取得したビットを値b (0または1) でランダムに埋めます。

例えば、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を取得し、取得したビットのうち値がd (0または1) であるビットを識別し、下付き文字配列を返す。 下付き文字配列は、識別されたビットの位置を示す。

たとえば、get_bit_array('111110000011', 3,5, 1) は、指定された11000ビット列に対して [3,4] を返します。

get_bit_array (varbit a, int b, int[] c) returns int[]下付き文字配列cで指定されるビットを取得し、取得したビットのうち値がb (0または1) であるビットを識別し、下付き文字配列を返す。 下付き文字配列は、識別されたビットの位置を示す。 添字配列cに含まれないビットはカウントされない。

たとえば、get_bit_array('111110000011', 1, array[1,5,6,7,10,11]) は [1,10,11] を返します。

set_bit_array (varbit a, int b, int c, int[] d, int e) returns varbit下付き文字配列dで指定されたビットの値を値b (0または1) に変更し、元の長さを超えるビットを値c (0または1) で埋めます。 返されるビット数はeです。

たとえば、set_bit_array('111100001111', 1,0, array[4,5,6,7], 2) は111111001111を返します。

set_bit_array_record (varbit a, int b, int c, int[] d) returns (varbit,int[])下付き文字配列dで指定されたビットの値を値b (0または1) に変更し、元の長さを超えるビットを値c (0または1) で埋めます。 この関数は、ビット列だけでなく、添え字配列も返します。 下付き文字配列は、値が変更されるビットの位置を示す。

たとえば、set_bit_array_record('111100001111', 0, 1, array[1,15]) は、1011000011111110と [1,15] を返します。

set_bit_array_record (varbit a, int b, int c, int[] d, int e) returns (varbit,int[])下付き文字配列dで指定されたビットの値を値b (0または1) に変更し、元の長さを超えるビットを値c (0または1) で埋めます。 この関数は、ビット列だけでなく、添え字配列も返します。 下付き文字配列は、値が変更されるビットの位置を示す。 この関数は、合計eビットの値を変更した直後に結果を返します。

たとえば、set_bit_array_record('111100001111', 1,0, array[1,4,5,6,7], 2) は、111111001111と [4,5] を返します。

bit_count_array (varbit a, int b, int[] c) returns int添字配列cで指定されるビットのうち、値b (0または1) の数をカウントします。

たとえば、bit_count_array('1111000011110000', 1, array[1,2,7,8]) は3を返します。

基本的な使用方法

  • varbitxプラグインを作成します。
    拡張varbitxを作成します。
  • varbitxプラグインを削除します。
    ドロップ延長varbitx;
  • varbitxプラグインでサポートされている関数を呼び出します。

    SELECT <function> ステートメントを実行して、関数を呼び出すことができます。

    • 次のステートメントを実行して、bit_count関数を呼び出します。
      select bit_count('1111000011110000', 1, 5, 4);

      次の応答が返されます。

      bit_count
      -----------  
               1
      (1行) 
    • 次のステートメントを実行して、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行) 

    関数とその説明の詳細については、「サポートされている関数」をご参照ください。