从多个开始和结束日期生成日期数组

Generating date array from several start and end dates

我正在尝试在 BQ 中生成一个日期数组,其中的日期位于 几个 开始日期和结束日期之间。

例如,对于开始日期和结束日期之间的几天,它看起来像这样:

SET DATES = GENERATE_DATE_ARRAY(DATE(2020,02,01), DATE(2022, 04, 25), INTERVAL 1 WEEK);

但是如果我想要包括所有这些日期,我将如何生成 DATESevent_date BETWEEN "2020-02-01" AND "2020-04-25", event_date BETWEEN "2021-02-01" AND "2021-04-25", event_date BETWEEN "2022-02-01" AND "2022-04-25")

我没有遇到任何简单的修复方法。

您可以只创建所有这些单独的数组,然后 concat_array() 它们,不是吗?

考虑以下

with dates_ranges as (
  select  "2020-02-01" start_date, "2020-04-25" end_date union all
  select  "2021-02-01", "2021-04-25" union all
  select  "2022-02-01", "2022-04-25" 
)
select date
from dates_ranges, 
unnest(generate_date_array(date(start_date), date(end_date), interval 1 week)) date