选择数组包含在其他数组上

时间:2018-07-16 14:56:36

标签: sql arrays postgresql

我需要为PostgreSql上的其他数组选择要包含的数组

我尝试使用:

select * from test.cruce
where calle <@ direccion

但是,结果为零。

当我使用

select * from test.cruce
where calle && direccion

calle;直达

{CAMILO,TORRES,1000,1099}";"{Cosquin,1000}
{LOS,ALELIES,300,399}";"{Las,Camelias,300}

第二种情况是失败的。

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

问题是您正在比较具有“相同”文本值,但以不同大小写(例如, URUBITINGA Urubitinga 。 首先,您必须将两个元素设置为相同的大小写,然后才能使用@>比较数组。

CREATE TEMPORARY TABLE cruce (calle TEXT[],direccion TEXT[]);
INSERT INTO cruce VALUES ('{CAMILO,TORRES,1000,1099}'::TEXT[],'{Cosquin,1000}'::TEXT[]),
                         ('{LOS,ALELIES,300,399}'::TEXT[],'{Las,Camelias,300}'::TEXT[]),
                         ('{EL,URUBITINGA,600,619}'::TEXT[],'{El,Urubitinga,600}'::TEXT[]);

SELECT * FROM cruce
WHERE LOWER(calle::TEXT)::TEXT[] @> LOWER(direccion::TEXT)::TEXT[];

          calle          |      direccion      
-------------------------+---------------------
 {EL,URUBITINGA,600,619} | {El,Urubitinga,600}
(1 Zeile)

请记住,将数组转换为TEXTLOWER,然后将其转换为TEXT[]会有一定的开销。