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
