CONTAINS
如果在集合中找到指定的元素,则返回 true,否则返回 false。集合可以为空白,但不能为 NULL。此函数在测试元素时使用空安全等同性检查。
行为类型
不可变语法
CONTAINS(collection, 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)