ビットマップ演算関数は、ビットマップデータ間の基本的な演算を提供します。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()関数は、論理的AND演算子rb_and()と同じですが、空の入力を空のビットマップデータと見なします。
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()と同じですが、空の入力を空のビットマップデータと見なします。
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つのビットマップデータの非論理積を提供します。構文は以下のとおりです:
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()と同じですが、空の入力を空のビットマップデータと見なします。