2012/5/30 Adenilton Batista da Silva <[email protected]>

>
> CREATE OR REPLACE FUNCTION STRTOROWS(NUMEROS TEXT)
>   RETURNS SETOF INTEGER AS
> $BODY$
> --PARA UTILIZAR A FUNÇÃO, PASSE OS NÚMEROS SEPARADOS POR VÍRGULA. EXEMPLO:
> SELECT STRTOROWS('1,2,3');
>  SELECT CAST((STRING_TO_ARRAY($1, ','))[S] AS INTEGER) FROM
> GENERATE_SERIES(1, ARRAY_UPPER((STRING_TO_ARRAY($1, ',')), 1)) AS S;
> $BODY$
>   LANGUAGE SQL;
>
>
> CREATE TEMP TABLE FOO(CODPRODUTO INTEGER, NOME NAME);
> INSERT INTO FOO VALUES (1, 'PRODUTO A');
> INSERT INTO FOO VALUES (2, 'PRODUTO B');
>
> CREATE TEMP TABLE FOO2 (CODPRODUTO TEXT);
> INSERT INTO FOO2 VALUES ('1,2,3');
>
> SELECT
> *
> FROM
> (
> SELECT STRTOROWS((SELECT CODPRODUTO FROM FOO2)) AS CODPRODUTO
>  ) S
> WHERE S.CODPRODUTO NOT IN (SELECT CODPRODUTO FROM FOO);
>
>
Ou, se vc esta usando uma versão >= 8.4 pode usar a função nativa unnest
[1] e não tem necessidade de implementar a "strtorows".

SELECT unnest(string_to_array(codproduto, ','))::integer as codproduto
  FROM foo2
EXCEPT
SELECT codproduto
  FROM foo;

[1] http://www.postgresql.org/docs/9.1/interactive/functions-array.html

-- 
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
>> Twitter: http://twitter.com/fabriziomello
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a