Ami*_*mir 1 sql postgresql date
我在 postgres 中有一张这样的表:
| ID | 开放日期 | 关闭日期 |
|---|---|---|
| 5 | 2006-08-04 | 2019-12-31 |
他们之间相隔4897天。我需要将日期范围改为 date 以便每天有一条记录。例如:
| ID | 开放日期 | 关闭日期 | 有效日期 |
|---|---|---|---|
| 5 | 2006-08-04 | 2019-12-31 | 2006-08-04 |
| 5 | 2006-08-04 | 2019-12-31 | 2006-08-05 |
| 5 | 2006-08-04 | 2019-12-31 | 2006-08-06 |
| ... | ………… | ………… | ………… |
| 5 | 2006-08-04 | 2019-12-31 | 2019-12-31 |
我尝试了这里提供的查询,如下所示:
SELECT
id,
open_date,
close_date,
open_date + seq.seqnum * interval '1 day' AS valid_date,
FROM
TAB1
LEFT JOIN (
SELECT
row_number() over () AS seqnum
FROM
TAB1) seq ON seqnum <= (close_date - open_date)
)
Run Code Online (Sandbox Code Playgroud)
TAB1 包含 600 行。运行此查询后,它会生成正确的记录,但每个 id 最多只能生成 600 条记录。这意味着此日期范围仅限到 2008 年 6 月 8 日
在 Postgres 中,您可以使用generate_series():
select t1.*, gs.valid_date
from tab1 t1 cross join lateral
generate_series(t1.open_date, t1.close_date, interval '1 day') as gs(valid_date);
Run Code Online (Sandbox Code Playgroud)