sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL unnest med tom 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;

(observera att jag bytte namn på kolumnen values till int_values som values är ett reserverat ord och bör inte användas som kolumnnamn).

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

Postgres 10 tillåter inte att unnest() används sådär längre.

Du måste använda en lateral sammanfogning:

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

Onlineexempel:http://rextester.com/ALNX23313

Det kan förenklas ytterligare när du använder en vänsterfog istället för korsfogning:

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

Onlineexempel:http://rextester.com/VBO52351



  1. Varför är SUPER-privilegier inaktiverade när binär loggningsalternativ är aktiverat?

  2. UTF-8, PHP och XML Mysql

  3. Hur man visar aktuella anslutningar i MySQL Workbench med hjälp av GUI

  4. SQL - Skillnaden mellan COALESCE och ISNULL?