bitmap_subset_in_range
Извлекает элементы из значения Bitmap в диапазоне от start_range до end_range (не включая конечное значение). Выходные элементы являются подмножеством значения Bitmap.
Эта функция в основном используется для таких сценариев, как постраничные запросы. Поддерживается начиная с версии v1.5.2.
Синтаксис
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 превышает максимальную длину (5) значения BITMAP 1,3,5,7,9. Возвращается 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 |
+-------+