跳到主要内容
版本: 最新版本-3.5

map_filter

通过将布尔数组或 Lambda 表达式 应用于每个键值对,来过滤 Map 中的键值对。 返回计算结果为 true 的键值对。

此函数从 v3.1 版本开始支持。

语法

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

    根据 array<boolean> 逐一计算 any_map 中的键值对,并返回计算结果为 true 的键值对。

  • map_filter(lambda_func, any_map)

    lambda_func 逐一应用于 any_map 中的键值对,并返回结果为 true 的键值对。

参数

  • any_map:Map 值。

  • array<boolean>:用于计算 Map 值的布尔数组。

  • lambda_func:用于计算 Map 值的 Lambda 表达式。

返回值

返回一个数据类型与 any_map 相同的 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)