PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres - Como converter linha com um intervalo int em linhas intermediárias de valores individuais desse intervalo?


Use generate_series() :
select gs.i, t.*
from t cross join lateral
     generate_series(start_i, end_i, 1) gs(i);

Estritamente falando, o lateral Não é necessário. Mas explica o que está acontecendo. Devo também notar que você também pode fazer:
select generate_series(start_i, end_i) as i, t.*
from t;

No entanto, generate_series() afeta o número de linhas na consulta. Não me sinto confortável em ter esses efeitos no SELECT cláusula.