如何获取每个任务的开始日期和结束日期之间的所有日期?

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;

注意这个提示和方法。具体语法取决于您使用的数据库。