Folgendes verwende ich derzeit:
CREATE FUNCTION array_intersect(a1 anyarray, a2 anyarray)
RETURNS anyarray AS
$$
SELECT ARRAY(
SELECT unnest($1)
INTERSECT SELECT unnest($2)
ORDER BY 1
);
$$ LANGUAGE sql
IMMUTABLE STRICT;
--get the length:
select array_length ( array_intersect(array[...], array[...]), 1);
Gibt es einen schnelleren Weg?
intarray
Erweiterung den&
Operator bereit , aber es scheint trotz des&&
Booleschen Tests für überlappende Arrays nicht für alle Arrays einen verallgemeinerten zu geben . Es wäre schön hinzuzufügen, aber ... nun, werfen Sie einen Blick auf den C-Quellcode für die PostgreSQL-Allzweck-Array-Funktionen und -Operatoren, um zu sehen, warum es nicht so viele gibt, wie Sie vielleicht erwarten. Die Array-API ist schrecklich.