Since 8.4, there are useful builtins in Postgres que hacen the function from the first answer más fácil y posiblemente más rápido (eso es lo que EXPLAIN me dice, de todos modos: "(costo = 0.00..0.07 filas = 1 ancho = 64)" para esta consulta vs. "(costo = 0.00..60.02 filas = 1 ancho = 64)" para el original) .
El código simplificado es:
SELECT ARRAY
(
SELECT UNNEST(a1)
INTERSECT
SELECT UNNEST(a2)
)
FROM (
SELECT array['two', 'four', 'six'] AS a1
, array['four', 'six', 'eight'] AS a2
) q;
y sí, puede convertirlo en una función:
CREATE FUNCTION array_intersect(anyarray, anyarray)
RETURNS anyarray
language sql
as $FUNCTION$
SELECT ARRAY(
SELECT UNNEST($1)
INTERSECT
SELECT UNNEST($2)
);
$FUNCTION$;
que se puede llamar como
SELECT array_intersect(array['two', 'four', 'six']
, array['four', 'six', 'eight']);
pero puedes también llámelo en línea:
SELECT array(select unnest(array['two', 'four', 'six']) intersect
select unnest(array['four', 'six', 'eight']));
Probado, no funciona en stock, necesita una extensión instalada para que funcione. pero +1 de todos modos. –
http://www.postgresql.org/docs/current/static/contrib.html # Necesito leer los datos aquí –
Buena captura, Kent – dwc