Senhores,
Como faço para pegar um subarray unidimensional de um array multidimensional?
Vejam este ex.:
bdteste=# CREATE TEMP TABLE bar(
bdteste(# id int,
bdteste(# ar int[3][4]
bdteste(# );
CREATE TABLE
bdteste=#
bdteste=# INSERT INTO bar VALUES (1,
'{{111,112,113,114},{121,122,123,124},{131,132,133,134}}'),
bdteste-# (2,
'{{211,212,213,124},{221,222,223,224},{231,232,233,234}}'),
bdteste-# (3,
'{{131,312,313,314},{321,322,323,324},{331,332,333,334}}');
INSERT 0 3
bdteste=# SELECT * FROM bar;
id | ar
----+---------------------------------------------------------
1 | {{111,112,113,114},{121,122,123,124},{131,132,133,134}}
2 | {{211,212,213,124},{221,222,223,224},{231,232,233,234}}
3 | {{131,312,313,314},{321,322,323,324},{331,332,333,334}}
(3 registros)
bdteste=# SELECT ar[1] FROM bar WHERE id = 1;
ar
----
(1 registro)
****===> Aqui eu esperava obter o array {111,112,113,114}
bdteste=# SELECT ar[2][4] FROM bar WHERE id = 1;
ar
-----
124
(1 registro)
***===> Um elemento está ok.
bdteste=# SELECT ar[2:2][1:4] FROM bar WHERE id = 1;
ar
---------------------
{{121,122,123,124}}
(1 registro)
***===> Reparem que não é um array unidimensional, eu esperava
{121,122,123,124}.
bdteste=# SELECT ar[2:2][4:4] FROM bar WHERE id = 1;
ar
---------
{{124}}
(1 registro)
***===> Ops!
bdteste=# SELECT array_dims((SELECT ar[2:2][1:4] FROM bar WHERE id = 1));
array_dims
------------
[1:1][1:4]
(1 registro)
bdteste=# SELECT array_upper((SELECT ar[2:2][1:4] FROM bar WHERE id = 1), 1);
array_upper
-------------
1
(1 registro)
bdteste=# SELECT array_upper((SELECT ar[2:2][1:4] FROM bar WHERE id = 1), 2);
array_upper
-------------
4
(1 registro)
Tem como obter o array unidimensional (como se fosse uma linha da
tabela) ou é melhor eu repensar a solução?
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral