array_contains_all
功能
检查数组arr1
是否包含数组arr2
中的所有元素,即arr2
是否为arr1
的子集。是的话返回1
,否则返回0
。
该函数从 2.4 版本开始支持。
语法
BOOLEAN array_contains_all(arr1, arr2)
参数说明
arr
: 用来比较的两个数组。上述语法检查arr2
是否为arr1
的子集。
arr1
和arr2
内元素的数据类型必须一致。关于 StarRocks 支持的数组元素数据类型,请参见ARRAY。
返回值说明
返回 BOOLEAN 类型的值。
如果 arr2
是 arr1
的子集,则返回 1
。否则,返回 0
。
如果 arr1
或 arr2
为 NULL,则返回 NULL。
使用说明
-
如果数组元素包含
null
,系统会按照正常值处理。 -
空数组默认为所有数组的子集。
-
两个数组中的元素顺序无需保持一致。
示例
-
创建表
t1
,并向表中插入数据。CREATE TABLE t1 (
c0 INT,
c1 ARRAY<INT>,
c2 ARRAY<INT>
) ENGINE=OLAP
DUPLICATE KEY(c0)
DISTRIBUTED BY HASH(c0);
INSERT INTO t1 VALUES
(1,[1,2,3],[1,2]),
(2,[1,2,3],[1,4]),
(3,NULL,[1]),
(4,[1,2,null],NULL),
(5,[1,2,null],[null]),
(6,[2,3],[]); -
查询表中数据。
SELECT * FROM t1 ORDER BY c0;
+------+------------+----------+
| c0 | c1 | c2 |
+------+------------+----------+
| 1 | [1,2,3] | [1,2] |
| 2 | [1,2,3] | [1,4] |
| 3 | NULL | [1] |
| 4 | [1,2,null] | NULL |
| 5 | [1,2,null] | [null] |
| 6 | [2,3] | [] |
+------+------------+----------+ -
检查
c2
的每行数据是否为c1
的子集。SELECT c0, c1, c2, array_contains_all(c1, c2) FROM t1 ORDER BY c0;
+------+------------+----------+----------------------------+
| c0 | c1 | c2 | array_contains_all(c1, c2) |
+------+------------+----------+----------------------------+
| 1 | [1,2,3] | [1,2] | 1 |
| 2 | [1,2,3] | [1,4] | 0 |
| 3 | NULL | [1] | NULL |
| 4 | [1,2,null] | NULL | NULL |
| 5 | [1,2,null] | [null] | 1 |
| 6 | [2,3] | [] | 1 |
+------+------------+----------+----------------------------+在返回结果中:
c0
为 1 时,c2
为c1
的子集,返回 1;c0
为 2 时,c2
不是c1
的子集,返回 0;c0
为 3 时,c1
为 NULL,c0
为 4 时,c2
为 NULL,故均返回 NULL;c0
为 5 时,两个数组包含数组元素null
,系统会按照正常值处理,返回1
;c0
为 6 时,c2
为空数组,默认为所有数组的子集,返回1
。