首页 > 解决方案 > 为 postgres 生成日期

问题描述

我有一张桌子

在此处输入图像描述

我的范围从“2019-01-02”到“2019-01-04”

我需要从给定范围之间的started_at和ended_at(可为空)生成ID和DATES(生成)

结果必须是这样的:

在此处输入图像描述

表中的 ID 4 不包含在结果中,因为它的started_at 和ended_at 不在“2019-01-02”和“2019-01-04”范围内

我需要在 postgres 中执行此操作的查询。

标签: postgresql

解决方案


利用generate_series()

select t.id, g.dt::date
from the_table t
  cross join generate_series(t.started_at::date + 1,
                             least(t.ended_at::date, date '2019-01-04'),
                             interval '1 day') as g(dt)
where t.started_at >= date '2019-01-02' 
  and t.started_at < date '2019-01-04';

推荐阅读