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

map_filter

Фильтрует пары ключ-значение в map, применяя к каждой паре Boolean-массив или Lambda-выражение. Возвращаются пары, которые оцениваются как true.

Эта функция поддерживается начиная с версии v1.5.2.

Синтаксис

MAP map_filter(any_map, array<boolean>)
MAP map_filter(lambda_func, any_map)
  • map_filter(any_map, array<boolean>)

    Оценивает пары ключ-значение в any_map одну за другой в соответствии с array<boolean> и возвращает пары ключ-значение, которые оцениваются как true.

  • map_filter(lambda_func, any_map)

    Применяет lambda_func к парам ключ-значение в any_map одну за другой и возвращает пары ключ-значение, результат которых равен true.

Параметры

  • any_map: значение map.

  • array<boolean>: Boolean-массив, используемый для оценки значения map.

  • lambda_func: Lambda-выражение, используемое для оценки значения map.

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

Возвращает map, тип данных которого совпадает с any_map.

Если any_map равен NULL, возвращается NULL. Если array<boolean> равен null, возвращается пустой map.

Если ключ или значение в map равен NULL, NULL обрабатывается как обычное значение.

Lambda-выражение должно иметь два параметра. Первый параметр представляет ключ. Второй параметр представляет значение.

Примеры

Использование array<boolean>

Следующий пример использует map_from_arrays() для генерации значения map {1:"ab",3:"cdd",2:null,null:"abc"}. Затем каждая пара ключ-значение оценивается в соответствии с array<boolean>, и возвращается пара, результат которой равен true.

mysql> select map_filter(col_map, array<boolean>[0,0,0,1,1]) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+----------------------------------------------------+
| map_filter(col_map, ARRAY<BOOLEAN>[0, 0, 0, 1, 1]) |
+----------------------------------------------------+
| {null:"abc"} |
+----------------------------------------------------+
1 row in set (0.02 sec)

mysql> select map_filter(null, array<boolean>[0,0,0,1,1]);
+-------------------------------------------------+
| map_filter(NULL, ARRAY<BOOLEAN>[0, 0, 0, 1, 1]) |
+-------------------------------------------------+
| NULL |
+-------------------------------------------------+
1 row in set (0.02 sec)

mysql> select map_filter(col_map, null) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+---------------------------+
| map_filter(col_map, NULL) |
+---------------------------+
| {} |
+---------------------------+
1 row in set (0.01 sec)

Использование Lambda-выражения

Следующий пример использует map_from_arrays() для генерации значения map {1:"ab",3:"cdd",2:null,null:"abc"}. Затем каждая пара ключ-значение оценивается в соответствии с Lambda-выражением, и возвращается пара ключ-значение, значение которой не равно null.


mysql> select map_filter((k,v) -> v is not null,col_map) from (select map_from_arrays([1,3,null,2,null],['ab','cdd',null,null,'abc']) as col_map)A;
+------------------------------------------------+
| map_filter((k,v) -> v is not null, col_map) |
+------------------------------------------------+
| {1:"ab",3:"cdd",null:'abc'} |
+------------------------------------------------+
1 row in set (0.02 sec)