Skip to content

ARRAY数据类型运算符

@>(包含)

检查一个数组是否包含另一个数组的所有元素。

并不要求两个数组完全相同,只要左侧的数组包含右侧数组的所有元素即可。如果右侧数组中有多个相同的元素,而左侧数组中只有一个该元素,@>仍然会返回TRUE。

sql
SQL> SELECT ARRAY[1,4,3] @> ARRAY[3,1,3];

EXPR1 | 
------------------------------------------------------------------------------
T |

<@(被包含)

检查一个数组是否是另一个数组的子集。即左侧的数组中的所有元素都必须存在于右侧的数组中。

并不要求两个数组完全相同,只要左侧的数组中的所有元素都在右侧的数组中即可。如果左侧数组中有多个相同的元素,而右侧数组中只有一个该元素,<@仍然会返回TRUE。

sql
SQL> SELECT ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6];

EXPR1 | 
------------------------------------------------------------------------------
T |

&&(交集)

检查两个数组是否有至少一个共同的元素。

sql
SQL> SELECT ARRAY[1,4,3] && ARRAY[2,1];

EXPR1 | 
------------------------------------------------------------------------------
T |

||(连接)

连接两个数组

注意:

  • 数组必须具有相同的维数或维数相差一维。
  • 数组可以和NULL连接,不支持空数组连接。
  • 两个数组元素的类型必须相同。
sql
-- 相同维数
SQL> SELECT ARRAY[1,2,3] || ARRAY[4,5,6,7];

EXPR1 | 
------------------------------------------------------------------------------
{1,2,3,4,5,6,7}|

-- 相差一维
SQL> SELECT ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]];

EXPR1 | 
------------------------------------------------------------------------------
{{1,2,3},{4,5,6},{7,8,9}}|

连接数组和元素

注意:

与元素连接的数组必须为一维数组。

  • 将元素连接到数组的开头:

    sql
    SQL> SELECT 3 || ARRAY[4,5,6];
    
    EXPR1 | 
    ------------------------------------------------------------------------------
    {3,4,5,6}|
  • 将元素连接到数组的末尾:

    sql
    SQL> SELECT ARRAY[4,5,6] || 7;
    
    EXPR1 | 
    ------------------------------------------------------------------------------
    {4,5,6,7}|