On Fri, Jun 10, 2011 at 11:00 AM, Arthur M. Kang <arthurmkang@gmail.com> wrote:
> How can I search a multidimensional array for an EXACT "subarray" match?
>
> The following produces true when I want it to produce false. Obviously, I
> would only want it to produce true for ARRAY[1,2], ARRAY[3,4], or
> ARRAY[5,6].
>
> SELECT ARRAY[ARRAY[1,2], ARRAY[3,4], ARRAY[5,6]] @> ARRAY[ARRAY[1,6]];
>
> Any help is greatly appreciated.
create or replace function slice_in_array(needle anyarray, haystack
anyarray) returns bool as
$$
select $1 in (select $2[v:v] from generate_series(1, array_upper($2, 1)) v);
$$ language sql immutable;
select slice_in_array(array[array[1,2]], ARRAY[ARRAY[1,2], ARRAY[3,4],
ARRAY[5,6]]);
-- or --
create or replace function slice_in_array(needle anyarray, haystack
anyarray) returns bool as
$$
select array[$1] in (select $2[v:v] from generate_series(1,
array_upper($2, 1)) v);
$$ language sql immutable;
select slice_in_array(ARRAY[1,2], ARRAY[ARRAY[1,2], ARRAY[3,4], ARRAY[5,6]]);
(not really sure what the deal is with the operator)
merlin