位图运算函数
位图运算函 数提供了位图数据间基本运算。seekdb 当前所支持的位图运算函数包括 rb_and()、rb_or()、rb_xor()、rb_andnot()、rb_and_null2empty()、rb_or_null2empty() 和 rb_andnot_null2empty()。
rb_and 和 rb_and_null2empty
rb_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 (0.001 sec)
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 (0.001 sec)
rb_and_null2empty() 函数计算逻辑与 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 (0.001 sec)
rb_or 和 rb_or_null2empty
rb_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 (0.001 sec)
rb_or_null2empty() 函数计算逻辑与 rb_or() 一致,但把空输入视为空的位图数据。
rb_xor
rb_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 (0.001 sec)
rb_andnot 和 rb_andnot_null2empty
rb_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 (0.001 sec)
rb_andnot_null2empty() 函数计算逻辑与 rb_andnot() 一致,但把空输入视为空的位图数据。