Перейти к основному содержимому

sub_bitmap

Описание

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

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

Эта функция похожа на 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 |
+-------+