/*
Desculpa, não fui claro ...
Vamos por partes... dividindo o moido abaixo ...
*/
--1. A função generate_series gera uma sequencia funciona da seguinte forma: [1]
--Exemplo: (gerando um listagem com 10 linhas...)
SELECT * FROM generate_series(1,10);
/*
--resultado
generate_series
---------------
1
2
3
4
5
6
7
8
9
10
(10 rows)
*/
--2. A função string_to_array, transforma uma string em array [2]
--Exemplo: (transformando uma string em um array de string, usando
como critério as ',' virgulas na string, para geração do array )
SELECT *
FROM string_to_array('1,2,3,4',','); --{1,2,3,4}
/*resultado
string_to_array
-----------------
{1,2,3,4}
(1 row)
*/
--3. A função array_upper, dá a dimensão, o tamanho do array [2]
--Exemplo: (obtendo o tamanho do array)
SELECT array_upper(string_to_array('{1,2,3,4}',','),1); --4
/*
--resultado
array_upper
-------------
4
(1 row)
*/
--4. A combinacao disso fica assim:
--Exemplo: o resultado desta consulta irá retornar duas colunas uma do
tipo array de string e uma do tipo integer (indice do array), as
seguintes colunas são:
-- id(text[]), i(integer)
SELECT *
FROM
(
SELECT *
FROM string_to_array('1,2,3,4',',') AS id
) AS z,
generate_series(
1,array_upper(string_to_array('1,2,3,4',','),1)) AS i;
/*
--resultado
id | i
-----------+---
{1,2,3,4} | 1
{1,2,3,4} | 2
{1,2,3,4} | 3
{1,2,3,4} | 4
(4 rows)
*/
--5. Tratando a query do item 4 fica dessa forma, que foi a
transformação de vários ids em formato linha texto para formato coluna
inteiros.
--Exemplo: o resultado obtido para uso no IN se for o caso
SELECT z.id[i]::integer
FROM
(
SELECT *
FROM string_to_array('1,2,3,4',',') AS id
) AS z,
generate_series(
1,array_upper(string_to_array('1,2,3,4',','),1)) AS i;
/*
--resultado
id
----
1
2
3
4
(4 rows)
*/
/*
[1]http://www.postgresql.org/docs/9.0/static/functions-srf.html
[2]http://www.postgresql.org/docs/9.0/static/functions-array.html
Cordialmente
Emerson Hermann
*/
Em 23 de dezembro de 2010 11:06, Beto Lima <[email protected]> escreveu:
> nossa Emerson , não entendi nada mas valeu pela ajuda.
> vou ter que ler isso umas 50 vezes pra sacar hehe
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral