CONTAINS

如果在集合中找到指定的元素,则返回 true,否则返回 false。集合可以为空白,但不能为 NULL。此函数在测试元素时使用空安全等同性检查。

行为类型

不可变

语法

CONTAINS(collection, val_to_test)

参数

collection
目标集合(ARRAYSET)。
val_to_test
要搜索的值;类型必须与集合的元素类型匹配或可以强制转换。

示例

=> SELECT CONTAINS(SET[1,2,3,4],2);
 contains
----------
t
(1 row)

您可以搜索 NULL 作为元素值:

=> SELECT CONTAINS(ARRAY[1,null,2],null);
 contains
----------
 t
(1 row)

您可以搜索复杂的元素类型:

=> SELECT CONTAINS(ARRAY[ARRAY[1,2,3],ARRAY[1,null,4]], ARRAY[1,2,3]);
 CONTAINS
----------
 t
(1 row)

=> SELECT CONTAINS(ARRAY[ARRAY[1,2,3],ARRAY[1,null,4]], ARRAY[1,null,4]);
 CONTAINS
----------
 t
(1 row)

第二个示例,比较数组与空元素,返回 true,因为 CONTAINS 在评估元素时使用空安全等同性检查。

如前面的示例所示,第一个实参可以是原始类型的字面量多维数组。字面量数组不能包含 ROW 元素,如直接构造语法(字面量)中所述,但表中的数组可以。在以下示例中,orders 表具有以下定义:

=> CREATE EXTERNAL TABLE orders(
  orderid int,
  accountid int,
  shipments Array[
    ROW(
      shipid int,
      address ROW(
        street varchar,
        city varchar,
        zip int
      ),
      shipdate date
    )
  ]
 ) AS COPY FROM '...' PARQUET;

以下查询测试特定订单。将 ROW 字面量作为第二个实参传递时,转换任何不明确的字段以确保类型匹配:

=> SELECT CONTAINS(shipments,
            ROW(1,ROW('911 San Marcos St'::VARCHAR,
                  'Austin'::VARCHAR, 73344),
            '2020-11-05'::DATE))
   FROM orders;
 CONTAINS
----------
 t
 f
 f
(3 rows)

另请参阅