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

sub_bitmap

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

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

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

Синтаксис

BITMAP sub_bitmap(BITMAP src, BIGINT offset, BIGINT len)

Параметры

  • src: BITMAP-значение, из которого вы хотите получить элементы.
  • offset: начальная позиция. Должно быть значением типа BIGINT. Обратите внимание на следующие особенности при использовании offset:
    • Смещение начинается с 0.
    • Отрицательные смещения отсчитываются справа налево. См. примеры 3 и 4.
    • Если начальная позиция, указанная в offset, превышает фактическую длину BITMAP-значения, возвращается NULL. См. пример 6.
  • len: количество элементов для получения. Должно быть значением типа BIGINT больше или равным 1. Если количество подходящих элементов меньше значения len, возвращаются все подходящие элементы. См. примеры 2, 3 и 7.

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

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

Примеры

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

Пример 1: Получить два элемента из BITMAP-значения со смещением 0.

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

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

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

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

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

Пример 4: Получить два элемента из BITMAP-значения со смещением -3.

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

Пример 5: Возвращается NULL, поскольку -10 является недопустимым значением для len.

select bitmap_to_string(sub_bitmap(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 0, -10)) value;
+-------+
| value |
+-------+
| NULL |
+-------+

Пример 6: Начальная позиция, указанная смещением 5, превышает длину BITMAP-значения 1,3,5,7,9. Возвращается NULL.

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

Пример 7: len установлен в 5, но только два элемента соответствуют условию. Все эти два элемента возвращаются.

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