ビットマップ演算関数は、ビットマップデータ間の基本的な演算を提供します。現在、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 つのビットマップデータの積集合(AND 演算)を計算します。構文は次のとおりです。
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 つのビットマップデータの和集合(OR 演算)を計算します。構文は次のとおりです。
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 つのビットマップデータに対する排他的論理和(XOR)演算を提供します。構文は次のとおりです。
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 つのビットマップデータに対する AND NOT 演算を提供します。構文は次のとおりです。
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 入力を空のビットマップデータとして扱います。