我有以下用于演示的示例数据:
表格:
create table tbl_array
(
array_data varchar[]
);
一些值:
insert into tbl_array values('{AUS,USA}'),('{IND,SA}'),('{UK,UAE,NZ}'),('{CAN,BAN,SL,KW}');
查询:我有输入值{USA,AUS}
或{KW,CAN,SL,BAN}
或{UK,UAE,NZ}
来从tbl_array获取详细信息。输入值可以有任何序列。
预期输出:
对于{USA,AUS}
:
array_data
-------------
{AUS,USA}
对于{KW,CAN,SL,BAN}
:
array_data
-------------
{CAN,BAN,SL,KW}
对于{UK,UAE,NZ}
:
array_data
-------------
{UK,UAE,NZ}
尝试:
select *
from tbl_array where array_data = ALL('{USA,AUS}');
获取错误:
找不到数据类型字符变化[]的数组类型
试试这个:
select * from tbl_array where array_data @> '{USA,AUS}' AND array_length(array_data, 1) = 2;
它必须同时包含(忽略顺序(和长度为2(如果您愿意,可以排除其他情况(。
array_length(array_data, 1)
1表示你的数组是一维的。
我还假设您的数组中有无重复。
还要注意,包含@>
的数组可以从GIN索引中受益。