sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL převádí pole vrácené z funkce na sloupce

můžete použít podvýběr?

postgres=# select ar[1], ar[2] from (select string_to_array('a b c', ' ') ar) as sq;
 ar | ar 
----+----
 a  | b
(1 row)

To stále vyžaduje, abyste explicitně extrahovali každý sloupec (jako už to děláte). Pokud je v poli více prvků, než je extrahováno, budou ztraceny, a pokud jich bude méně, pak chybějící sloupce budou mít pouze NULL .

EDIT:Myslím, že bych to celé zabalil do podvýběru; vnitřní dílčí výběr vygeneruje požadované řádky , přičemž vnější výběr promítne vnitřní dotaz do požadovaných sloupců :

SELECT subquery1.a, subquery1.b, subquery1.c, 
    myfunction_result[1], myfunction_result[2] 
FROM ( SELECT table1.a, table1.b, table1.c,
              MyFunction(table1.a, table1.b, table1.c) as myfunction_result
       FROM table1 INNER JOIN table2 using(b) 
       WHERE ... GROUP BY table1.a, table1.b, table1.c
) AS subquery1;

Vnitřní a vnější výběry budou správně korelovat s table1 reference.



  1. php formulář:nelze aktualizovat databázi, dotaz s vícenásobným připojením

  2. Materializovaný pohled PostgreSQL

  3. Jak definovat jedinečné omezení pro sloupec tabulky MySQL v Ruby on Rails 3?

  4. jak převést datum na číslo měsíce?