跳到主要内容
版本:Latest-3.2

array_contains_all

功能

检查数组arr1是否包含数组arr2中的所有元素,即arr2是否为arr1的子集。是的话返回1,否则返回0

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

语法

BOOLEAN array_contains_all(arr1, arr2)

参数说明

arr: 用来比较的两个数组。上述语法检查arr2是否为arr1的子集。

arr1arr2内元素的数据类型必须一致。关于 StarRocks 支持的数组元素数据类型,请参见ARRAY

返回值说明

返回 BOOLEAN 类型的值。

如果 arr2arr1 的子集,则返回 1。否则,返回 0

如果 arr1arr2为 NULL,则返回 NULL。

使用说明

  • 如果数组元素包含 null,系统会按照正常值处理。

  • 空数组默认为所有数组的子集。

  • 两个数组中的元素顺序无需保持一致。

示例

  1. 创建表 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],[]);
  2. 查询表中数据。

    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] | [] |
    +------+------------+----------+
  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 时,c2c1的子集,返回 1;

    c0 为 2 时,c2 不是 c1 的子集,返回 0;

    c0 为 3 时,c1 为 NULL,c0 为 4 时,c2 为 NULL,故均返回 NULL;

    c0 为 5 时,两个数组包含数组元素 null,系统会按照正常值处理,返回 1

    c0 为 6 时,c2 为空数组,默认为所有数组的子集,返回 1