sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-unnest met lege array

select id, 
       case 
         when int_values is null or array_length(int_values,1) is null then null
         else unnest(int_values)
       end as value
from the_table;

(merk op dat ik de kolom values heb hernoemd naar int_values als values is een gereserveerd woord en mag niet worden gebruikt als kolomnaam).

SQLFiddle:http://sqlfiddle.com/#!1/a0bb4/1

Postgres 10 staat het gebruik van unnest() niet toe zo meer.

U moet een laterale verbinding gebruiken:

select id, t.i
from the_table
   cross join lateral unnest(coalesce(nullif(int_values,'{}'),array[null::int])) as t(i);

Online voorbeeld:http://rextester.com/ALNX23313

Het kan nog verder worden vereenvoudigd als je een left join gebruikt in plaats van de cross join:

select id, t.i
from the_table
 left join lateral unnest(int_values) as t(i) on true;

Online voorbeeld:http://rextester.com/VBO52351



  1. Hoe een bestand van de ene map naar de andere te verplaatsen met behulp van PL SQL

  2. Een query uitvoeren - MySQL en PHP

  3. Hoe de gegevens ophalen uit een binair logbestand en invoegen in onze gewenste tabel in MySQL?

  4. Hoe Oracle LOB te laten vallen