bitmap_subset_in_range
截取 Bitmap 值中位于 start_range
和 end_range
范围(不包括 end_range)内的元素。 输出的元素是 Bitmap 值的一个子集。
此函数主要用于分页查询等场景。 v3.1 及以上版本支持此函数。
语法
BITMAP bitmap_subset_in_range(BITMAP src, BIGINT start_range, BIGINT end_range)
参数
src
:从中获取元素的 Bitmap 值。start_range
:截取元素的起始范围。它必须是 BIGINT 值。 如果指定的起始范围超过 BITMAP 值的最大长度,则返回 NULL。 请参见示例 4。end_range
:截取元素的结束范围。它必须是 BIGINT 值。 如果end_range
等于或小于start range
,则返回 NULL。 请参见示例 3。
返回值
返回 BITMAP 类型的值。如果任何输入参数无效,则返回 NULL。
使用说明
子集元素包括 start_range
但不包括 end_range
。 请参见示例 5。
示例
在以下示例中,bitmap_subset_in_range() 的输入是 bitmap_from_string 的输出。 例如,bitmap_from_string('1,1,3,1,5,3,5,7,7,9')
返回 1, 3, 5, 7, 9
。 bitmap_subset_in_range() 将此 BITMAP 值作为输入。
示例 1:从 BITMAP 值中获取元素值在 1 到 4 范围内的子集元素。 此范围内的值为 1 和 3。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 1, 4)) value;
+-------+
| value |
+-------+
| 1,3 |
+-------+
示例 2:从 BITMAP 值中获取元素值在 1 到 100 范围内的子集元素。 结束值超过 BITMAP 值的最大长度,并返回所有匹配的元素。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 0, 100)) value;
+-----------+
| value |
+-----------+
| 1,3,5,7,9 |
+-----------+
示例 3:返回 NULL,因为结束范围 3
小于起始范围 4
。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 4, 3)) value;
+-------+
| value |
+-------+
| NULL |
+-------+
示例 4:起始范围 10 超过 BITMAP 值 1,3,5,7,9
的最大长度 (5)。 返回 NULL。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 10, 15)) value;
+-------+
| value |
+-------+
| NULL |
+-------+
示例 5:返回的子集包括起始值 1
但不包括结束值 3
。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,4,5,6,7,9'), 1, 3)) value;
+-------+
| value |
+-------+
| 1 |
+-------+