From: | "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | "David Fetter" <david(at)fetter(dot)org> |
Cc: | "Josh Trutwin" <josh(at)trutwins(dot)homeip(dot)net>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: Array intersection |
Date: | 2007-10-17 19:56:10 |
Message-ID: | 162867790710171256m29f5151lccf0301989a8a90a@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> > <snip>
> >
> > > CREATE OR REPLACE FUNCTION array_intersect(ANYARRAY, ANYARRAY)
> > > RETURNS ANYARRAY
> > > LANGUAGE SQL
> > > AS $$
> > > SELECT ARRAY(
> > > SELECT $1[i] AS "the_intersection"
> > > FROM generate_series(
> > > array_lower($1,1),
> > > array_upper($1,1)
> > > ) AS i
> > > INTERSECT
> > > SELECT $2[j] AS "the_intersection"
> > > FROM generate_series(
> > > array_lower($2,1),
> > > array_upper($2,1)
> > > ) AS j
> > > );
> > > $$;
> >
nice :)
Maybe we can add function "generate_iterator"
CREATE OR REPLACE FUNCTION generate_iterator(ANYARRAY)
RETURNS SETOF integer AS
$$
SELECT i
FROM generate_series(array_lower($1, 1), array_upper($1,1)) AS i
$$ LANGUAGE SQL;
then
CREATE OR REPLACE FUNCTION array_intersect(ANYARRAY, ANYARRAY)
RETURNS ANYARRAY
LANGUAGE SQL AS
$$
SELECT ARRAY(
SELECT $1[i]
FROM genarate_iterator($1) i
INTERSECT
SELECT $2[j]
FROM generate_iterator($2) j
)
$$ ;
Regars
Pavel
From | Date | Subject | |
---|---|---|---|
Next Message | Lothar Behrens | 2007-10-17 20:03:21 | conditional alter table add ? |
Previous Message | Richard Huxton | 2007-10-17 19:37:18 | Re: Poor Plan selected w/ not provided a date/time but selecting date/time from a table |