Estava realizando algumas queries aqui no meu trabalho e tive a
necessidade de uma função que retornasse um array contendo os elementos
de um determinado array e não estão presentes em outro, igual ao
array_diff do PHP [1].
Para resolver esse pequeno problema bastou um SELECT, vejam a
implementação da função "array_diff" para PostgreSQL abaixo:
CREATE OR REPLACE FUNCTION array_diff (anyarray, anyarray) RETURNS
anyarrayAS $$ SELECT array( SELECT $1[s.i] FROM
generate_series(array_lower($1,1), array_upper($1,1)) AS s(i) WHERE NOT
$1[s.i] = ANY($2) );$$LANGUAGE sql;
postg...@bdteste=# SELECT array_diff(array[1, 2, 3], array[1, 4, 3]);
array_diff------------ {2}(1 row)
postg...@bdteste=# SELECT array_diff(array[1, 4, 3], array[1, 2, 3]);
array_diff------------ {4}(1 row)

Espero ter ajudado de alguma forma.
[1] http://br.php.net/manual/en/function.array-diff.php

Cordialmente,
Fabrízio de Royes Mellofabriziomello [at] gmail.com

--
Postado por Fabrízio de Royes Mello no Fabrízio de Royes Mello em
9/17/2010 09:54:00 AM
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a