【发布时间】:2021-10-22 01:42:12
【问题描述】:
我在 postgres 中有一张这样的表:
| id | open_date | close_date |
|---|---|---|
| 5 | 2006-08-04 | 2019-12-31 |
它们之间存在 4897 天。我需要将日期范围转换为日期,以便每天有一条记录。例如:
| id | open_date | close_date | valid_date |
|---|---|---|---|
| 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 |
我尝试了here 提供的查询,如下所示:
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)
)
TAB1 包含 600 行。运行此查询后,它会生成正确的记录,但每个 ID 最多只能生成 600 条记录。这意味着此日期范围仅到 2008-06-08
【问题讨论】:
标签: sql postgresql date