ARRAY_EXCEPT

找出在ARRAY数组a中,但不在ARRAY数组b中的元素,并去掉重复的元素后,返回新的ARRAY数组。

命令格式

array<T> array_except(array<T> <a>, array<T> <b>)

参数说明

ab:必填。ARRAY数组。array<T>中的T指代ARRAY数组元素的数据类型,数组中的元素可以为任意类型。ab的数据类型必须保持一致。

返回值说明

返回ARRAY类型。返回规则如下:

  • 新ARRAY数组无重复元素且元素顺序与a中的元素顺序保持一致。

  • ARRAY数组中存在元素为NULL时,NULL值会参与运算。

  • 任一输入数组为空时,返回对非空数组去重后的新ARRAY数组。

  • 输入数组全部为空时,返回空数组。

使用示例

  • 示例1:找出在ARRAY数组array(1, 1, 3, 3, 5, 5)中,不在ARRAY数组array(1, 1, 2, 2, 3, 3)中的元素并去重。命令示例如下。

    --返回[5]。
    select array_except(array(1, 1, 3, 3, 5, 5), array(1, 1, 2, 2, 3, 3));
  • 示例2:找出在ARRAY数组array(1, 1, 3, 3, 5, 5, null, null)中,不在ARRAY数组array(1, 1, 2, 2, 3, 3)中的元素并去重。命令示例如下。

    --返回[5,null]。
    select array_except(array(1, 1, 3, 3, 5, 5, null, null), array(1, 1, 2, 2, 3, 3));
  • 示例3:任一输入ARRAY数组为空。命令示例如下。

    --返回[2,1]。
    select array_except(array(2, 1, 1, 2), cast(array() as array<int>)); 
  • 示例4:输入ARRAY数组全部为空。命令示例如下。

    --返回[]。
    select array_except(cast(array() as array<int>), cast(array() as array<int>));

相关函数

ARRAY_EXCEPT函数属于复杂类型函数,更多对复杂类型数据(例如ARRAY、MAP、STRUCT、JSON数据)的处理函数请参见复杂类型函数