ビットマップ演算関数は、ビットマップデータ間の基本的な演算を提供します。OceanBaseデータベースで現在サポートされているビットマップ演算関数には、rb_and()、rb_or()、rb_xor()、rb_andnot()、rb_and_null2empty()、rb_or_null2empty()、および rb_andnot_null2empty() が含まれます。
rb_and と rb_and_null2empty
rb_and() 関数は、2つのビットマップデータの共通部分を計算します。構文は以下のとおりです:
rb_and(rb1, rb2)
パラメータ rb1 と rb2 の順序は結果に影響しません。
例:
SELECT rb_to_string(rb_and(rb_from_string('1,2,3'), rb_from_string('2,3,4')));
+------------------------------------------------------------------------+
| rb_to_string(rb_and(rb_from_string('1,2,3'), rb_from_string('2,3,4'))) |
+------------------------------------------------------------------------+
| 2,3 |
+------------------------------------------------------------------------+
1 row in set
SELECT rb_to_string(rb_and(rb_from_string('1,2,3'), NULL));
+-----------------------------------------------------+
| rb_to_string(rb_and(rb_from_string('1,2,3'), NULL)) |
+-----------------------------------------------------+
| NULL |
+-----------------------------------------------------+
1 row in set
rb_and_null2empty() 関数の論理は rb_and() と同じですが、NULL入力を空のビットマップデータと見なします。
SELECT rb_to_string(rb_and_null2empty(rb_from_string('1,2,3'), NULL));
+----------------------------------------------------------------+
| rb_to_string(rb_and_null2empty(rb_from_string('1,2,3'), NULL)) |
+----------------------------------------------------------------+
| |
+----------------------------------------------------------------+
1 row in set
rb_or と rb_or_null2empty
rb_or() 関数は、2つのビットマップデータの和集合を計算します。構文は以下のとおりです:
rb_or(rb1, rb2)
パラメータ rb1 と rb2 の順序は結果に影響しません。
例:
SELECT rb_to_string(rb_or(rb_from_string('1,2,3'), rb_from_string('2,3,4')));
+-----------------------------------------------------------------------+
| rb_to_string(rb_or(rb_from_string('1,2,3'), rb_from_string('2,3,4'))) |
+-----------------------------------------------------------------------+
| 1,2,3,4 |
+-----------------------------------------------------------------------+
1 row in set
rb_or_null2empty() 関数の論理は rb_or() と同じですが、NULL入力を空のビットマップデータと見なします。
rb_xor
rb_xor() 関数は、2つのビットマップデータの排他的論理和を提供します。構文は以下のとおりです:
rb_xor(rb1, rb2)
パラメータ rb1 と rb2 の順序は結果に影響しません。
例:
SELECT rb_to_string(rb_xor(rb_from_string('1,2,3'), rb_from_string('2,3,4')));
+------------------------------------------------------------------------+
| rb_to_string(rb_xor(rb_from_string('1,2,3'), rb_from_string('2,3,4'))) |
+------------------------------------------------------------------------+
| 1,4 |
+------------------------------------------------------------------------+
1 row in set
rb_andnotとrb_andnot_null2empty
rb_andnot() 関数は、2つのビットマップデータに対するANDNOT演算を提供します。構文は以下のとおりです:
rb_andnot(rb1, rb2)
この関数は、パラメータ rb1 を計算基盤として、それと rb2 の差を計算します。つまり、返されるビットマップデータの値 = rb1 - rb2 となります。
例:
SELECT rb_to_string(rb_andnot(rb_from_string('1,2,3'), rb_from_string('2,3,4')));
+---------------------------------------------------------------------------+
| rb_to_string(rb_andnot(rb_from_string('1,2,3'), rb_from_string('2,3,4'))) |
+---------------------------------------------------------------------------+
| 1 |
+---------------------------------------------------------------------------+
1 row in set
rb_andnot_null2empty() 関数の計算ロジックは rb_andnot() と一致しますが、NULL入力を空のビットマップデータと見なします。