跳到主要内容
版本:2.5

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) BUCKETS 8;

    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时,c``1为NULL,c0为4时,c2为NULL,故均返回NULL;

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

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