any_match
返回数组中是否有任何元素与给定的谓词匹配。
-
如果一个或多个元素与谓词匹配,则返回
true
(1)。 -
如果没有元素匹配(一个特殊情况是当数组为空时),则返回
false
(0)。 -
如果谓词为一个或多个元素返回 NULL,而对所有其他元素返回
false
,则返回 NULL。
此函数从 v3.0.6 版本开始支持。
语法
any_match(lambda_function, arr1, arr2...)
返回 arr1
中是否有任何元素与 lambda 函数中给定的谓词匹配。
参数
-
arr1
:要匹配的数组。 -
arrN
:lambda 函数中使用的可选数组。 -
lambda_function
:用于匹配值的 lambda 函数。
返回值
返回一个 BOOLEAN 值。
使用说明
- lambda 函数遵循 array_map() 中的用法说明。
- 如果输入数组为 null 或 lambda 函数的结果为 null,则返回 null。
- 如果
arr1
为空,则返回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 |
+---------------------------------------------+