跳到主要内容

位图运算函数

位图运算函数提供了位图数据间基本运算。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)

参数 rb1rb2 的顺序不影响结果。

示例如下:

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)

参数 rb1rb2 的顺序不影响结果。

示例如下:

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)

参数 rb1rb2 的顺序不影响结果。

示例如下:

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() 一致,但把空输入视为空的位图数据。