数组:找不到数据类型字符 varying[] 的数组类型
Array: could not find array type for data type character varying[]
我有以下示例数据用于演示:
Table:
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}');
出现错误:
could not find array type for data type character varying[]
试试这个:
select * from tbl_array where array_data @> '{USA,AUS}' AND array_length(array_data, 1) = 2;
它必须同时包含(忽略顺序)并且长度为 2(如果您愿意,可以排除其他情况)。
array_length(array_data, 1)
1 表示您的数组是一维的。
我还假设您的数组中没有重复项。
另请注意,包含 @>
的数组可以受益于 GIN 索引。
我有以下示例数据用于演示:
Table:
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}');
出现错误:
could not find array type for data type character varying[]
试试这个:
select * from tbl_array where array_data @> '{USA,AUS}' AND array_length(array_data, 1) = 2;
它必须同时包含(忽略顺序)并且长度为 2(如果您愿意,可以排除其他情况)。
array_length(array_data, 1)
1 表示您的数组是一维的。
我还假设您的数组中没有重复项。
另请注意,包含 @>
的数组可以受益于 GIN 索引。