Перейти к основному содержимому
Версия: 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 |
+-------+