Перейти к основному содержимому
Версия: 2.0.x

bitmap_subset_limit

Извлекает указанное количество элементов из значения BITMAP, начиная со значения элемента start range. Выходные элементы являются подмножеством src.

Эта функция в основном используется для таких сценариев, как постраничные запросы. Поддерживается начиная с версии v1.5.2.

Эта функция похожа на sub_bitmap. Разница в том, что эта функция извлекает элементы, начиная со значения элемента (start_range), тогда как sub_bitmap извлекает элементы, начиная со смещения.

Синтаксис

BITMAP bitmap_subset_limit(BITMAP src, BIGINT start_range, BIGINT limit)

Параметры

  • src: значение BITMAP, из которого нужно получить элементы.
  • start_range: начало диапазона для извлечения элементов. Должно быть значением типа BIGINT. Если указанное начало диапазона превышает максимальный элемент значения BITMAP и limit положительный, возвращается NULL. См. пример 4.
  • limit: количество элементов для получения, начиная с start_range. Отрицательные значения limit отсчитываются справа налево. Если количество соответствующих элементов меньше значения limit, возвращаются все соответствующие элементы.

Возвращаемое значение

Возвращает значение типа BITMAP. NULL возвращается, если любой из входных параметров недействителен.

Примечания по использованию

  • Элементы подмножества включают start range.
  • Отрицательные значения limit отсчитываются справа налево. См. пример 3.

Примеры

В следующих примерах входными данными для bitmap_subset_limit() является результат bitmap_from_string. Например, bitmap_from_string('1,1,3,1,5,3,5,7,7,9') возвращает 1, 3, 5, 7, 9. bitmap_subset_limit() принимает это значение BITMAP в качестве входных данных.

Пример 1: Получить 4 элемента из значения BITMAP со значениями элементов, начиная с 1.

select bitmap_to_string(bitmap_subset_limit(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 1, 4)) value;
+---------+
| value |
+---------+
| 1,3,5,7 |
+---------+

Пример 2: Получить 100 элементов из значения BITMAP со значениями элементов, начиная с 1. Limit превышает длину значения BITMAP, и возвращаются все соответствующие элементы.

select bitmap_to_string(bitmap_subset_limit(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 1, 100)) value;
+-----------+
| value |
+-----------+
| 1,3,5,7,9 |
+-----------+

Пример 3: Получить -2 элемента из значения BITMAP со значениями элементов, начиная с 5 (отсчёт справа налево).

select bitmap_to_string(bitmap_subset_limit(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 5, -2)) value;
+-----------+
| value |
+-----------+
| 3,5 |
+-----------+

Пример 4: Начало диапазона 10 превышает максимальный элемент значения BITMAP 1,3,5,7,9, и limit положительный. Возвращается 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 |
+-------+