我需要为PostgreSql上的其他数组选择要包含的数组
我尝试使用:
select * from test.cruce
where calle <@ direccion
但是,结果为零。
当我使用
select * from test.cruce
where calle && direccion
{CAMILO,TORRES,1000,1099}";"{Cosquin,1000}
{LOS,ALELIES,300,399}";"{Las,Camelias,300}
第二种情况是失败的。
有什么主意吗?
答案 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)
请记住,将数组转换为TEXT
,LOWER
,然后将其转换为TEXT[]
会有一定的开销。