SQL 方言通

首页 / 数组和 Map

ARRAY_CONTAINS 判断数组是否包含元素

ARRAY_CONTAINS 判断数组中是否有指定元素,七个引擎都同名可用。差异在返回类型和版本:StarRocks 返回 1 或 0 而不是布尔值,Hologres 需要 V1.3.19 及以上版本,并且不支持常量数组。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持ARRAY_CONTAINS(a, v)返回 BOOLEAN。v 的类型必须与数组元素类型一致。官方文档
Hologres支持ARRAY_CONTAINS(array, target_value)Hologres V1.3.19 起提供,返回 BOOLEAN。文档说明暂不支持常量查询,例如直接对 ARRAY[...] 字面量调用。官方文档
StarRocks支持array_contains(any_array, any_element)包含时返回 1,否则返回 0。可以判断数组中是否有 NULL,也可以判断多维数组是否包含某个子数组,子数组的元素顺序必须一致。官方文档
Doris支持ARRAY_CONTAINS(arr, value)1.2.0 起提供,返回 BOOLEAN。数组为 NULL 时返回 NULL。官方文档
Hive支持array_contains(Array<T>, value)数组包含该值时返回 TRUE。官方文档
Spark SQL支持array_contains(array, value)Spark 1.5.0 起提供,返回布尔值。官方文档
Flink SQL支持ARRAY_CONTAINS(haystack, needle)可以判断数组中是否有 NULL 元素。数组为 NULL 时返回 NULL。needle 会隐式转换为数组元素的类型。官方文档

迁移注意事项

示例

筛选带 vip 标签的用户

MaxCompute
SELECT user_id FROM user_tags WHERE ARRAY_CONTAINS(tags, 'vip');
Hologres
SELECT user_id FROM user_tags WHERE ARRAY_CONTAINS(tags, 'vip');
StarRocks
SELECT user_id FROM user_tags WHERE array_contains(tags, 'vip') = 1;
Doris
SELECT user_id FROM user_tags WHERE ARRAY_CONTAINS(tags, 'vip');
Hive
SELECT user_id FROM user_tags WHERE array_contains(tags, 'vip');
Spark SQL
SELECT user_id FROM user_tags WHERE array_contains(tags, 'vip');
Flink SQL
SELECT user_id FROM user_tags WHERE ARRAY_CONTAINS(tags, 'vip');

同类函数

最后核对日期: