跳到主要内容
版本:3.2

any_match

功能

判断数组中是否有元素匹配谓词中 (predicate) 指定的条件。

  • 如果有一个或多个元素匹配,则返回 True (1)。

  • 如果没有任何元素匹配或数组为空,则返回 False (0)。

  • 如果数组中有元素为 NULL,而其他元素都不匹配,则返回 NULL。

该函数从 3.0.6 版本开始支持。

语法

any_match(lambda_function, arr1, arr2...)

判断数组中是否有元素匹配 Lambda 表达式中指定的条件。

参数说明

  • arr: 进行判断的数组。

  • lambda_function: 作为匹配条件的 Lambda 表达式。

返回值说明

返回 BOOLEAN 类型的值。

使用说明

  • 关于 Lambda 表达式的使用注意事项,参见 array_map()
  • 如果输入的数组为 NULL 或者 Lambda 表达式的结果为 NULL,则返回 NULL。
  • 如果第一个数组为空,则返回 false
  • 如果要将该函数应用在 MAP 上,可以将 any_match((k,v)->k>v,map) 改写为 any_match(map_values(transform_values((k,v)->k>v, map)))。例如,select any_match(map_values(transform_values((k,v)->k>v, map{2:1}))); 返回 1。

示例

判断数组 x 中是否有元素小于数组 y 中的元素。

select any_match((x,y) -> x < y, [1,2,8], [4,5,6]);
+--------------------------------------------------+
| any_match((x, y) -> x < y, [1, 2, 8], [4, 5, 6]) |
+--------------------------------------------------+
| 1 |
+--------------------------------------------------+

select any_match((x,y) -> x < y, [11,12,8], [4,5,6]);
+----------------------------------------------------+
| any_match((x, y) -> x < y, [11, 12, 8], [4, 5, 6]) |
+----------------------------------------------------+
| 0 |
+----------------------------------------------------+

select any_match((x,y) -> x < y, [11,12,null], [4,5,6]);
+-------------------------------------------------------+
| any_match((x, y) -> x < y, [11, 12, NULL], [4, 5, 6]) |
+-------------------------------------------------------+
| NULL |
+-------------------------------------------------------+

select any_match((x,y) -> x < y, [], []);
+------------------------------------+
| any_match((x, y) -> x < y, [], []) |
+------------------------------------+
| 0 |
+------------------------------------+

select any_match((x,y) -> x < y, null, [4,5,6]);
+---------------------------------------------+
| any_match((x, y) -> x < y, NULL, [4, 5, 6]) |
+---------------------------------------------+
| NULL |
+---------------------------------------------+