如何获取每个任务的开始日期和结束日期之间的所有日期?
How do I get all dates between start date and end date for each task?
在oracle数据库中,我有一个table存储TASK_ID、TASK_START_DATE、TASK_END_DATE。
如何创建每行显示 TASK_ID 和日期的 table? (日期是从开始到结束的每一天)
TASK_ID
TASK_START_DATE
TASK_END_DATE
001
03-04-2021
05-04-2021
002
05-04-2021
07-04-2021
至
TASK_ID
DATE
001
03-04-2021
001
04-04-2021
001
05-04-2021
002
05-04-2021
002
06-04-2021
002
07-04-2021
众所周知,日期和时间函数依赖于数据库。但是,在标准 SQL 中,您可以使用递归 CTE 来解决这个问题:
with recursive dates as (
select TASK_ID, TASK_START_DATE, TASK_END_DATE
from t
union all
select TASK_ID, TASK_START_DATE + INTERVAL '1' DAY, TASK_END_DATE
from dates
where TASK_START_DATE < TASK_END_DATE
)
select task_id, task_start_date
from cte;
注意这个提示和方法。具体语法取决于您使用的数据库。
在oracle数据库中,我有一个table存储TASK_ID、TASK_START_DATE、TASK_END_DATE。 如何创建每行显示 TASK_ID 和日期的 table? (日期是从开始到结束的每一天)
TASK_ID | TASK_START_DATE | TASK_END_DATE |
---|---|---|
001 | 03-04-2021 | 05-04-2021 |
002 | 05-04-2021 | 07-04-2021 |
至
TASK_ID | DATE |
---|---|
001 | 03-04-2021 |
001 | 04-04-2021 |
001 | 05-04-2021 |
002 | 05-04-2021 |
002 | 06-04-2021 |
002 | 07-04-2021 |
众所周知,日期和时间函数依赖于数据库。但是,在标准 SQL 中,您可以使用递归 CTE 来解决这个问题:
with recursive dates as (
select TASK_ID, TASK_START_DATE, TASK_END_DATE
from t
union all
select TASK_ID, TASK_START_DATE + INTERVAL '1' DAY, TASK_END_DATE
from dates
where TASK_START_DATE < TASK_END_DATE
)
select task_id, task_start_date
from cte;
注意这个提示和方法。具体语法取决于您使用的数据库。