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

PolarDB:varbitx

最終更新日:Sep 03, 2026

PostgreSQL コミュニティ版に組み込まれている varbit 拡張機能は、基本的な BIT 型演算のみをサポートしています。PolarDB for PostgreSQL および では、varbit 拡張機能に追加のビット演算を実装することで、リアルタイムユーザープロファイル推薦システム、アクセス制御広告システム、チケット発券システムなど、より幅広いユースケースに対応しています。

前提条件

PolarDB for PostgreSQL のバージョンが PostgreSQL 11 であること。

関数

関数

説明

get_bit (varbit a, int b, int c) returns 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

位置 c から d ビット内の 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 のランダムなビット文字列を生成します。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 ビットを抽出し、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) であるかを確認し、一致するインデックス位置を返します。ビット文字列の長さを超える位置は含めません。

例: 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 で指定されたインデックス位置のビットを 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 で指定されたインデックス位置のビットを b (0 または 1) に設定します。元の長さを超えるビットは c (0 または 1) で埋めます。更新された varbit 値と、この操作で b に設定したビットのインデックス位置配列を返します。

例: set_bit_array_record('111100001111', 0, 1, array[1,15]) は、更新されたビット列 1011000011111110 とインデックス配列 array[1,15] を返します (説明: 0 に設定し、元の長さを超える部分は 1 で埋めます) 。

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 ビットを正常に設定した後に停止します。更新された varbit 値と、この操作で b に設定したビットのインデックス位置配列を返します。

例: set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2) は、更新されたビット列 111111001111 とインデックス配列 array[4,5] を返します (説明: 1 に設定し、元の長さを超える部分は 0 で埋め、2 ビットを正常に設定した後に停止します。array[1] はすでに 1 であったため、変更されませんでした) 。

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 を返します。

使用方法

  • 拡張機能の作成

    CREATE EXTENSION varbitx;
  • 拡張機能の削除

    DROP EXTENSION varbitx;
  • 関数の使用

    select <function> を使用します。例:

    • 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)

    関数の詳細については、「関数」をご参照ください。