如何在BigQuery中获取每月20日至25日的日期范围?
在BigQuery中获取每月20日至25日日期范围的高效方法
不需要为每个月单独创建CTE再用UNION ALL合并,这里有两种更简洁高效的方案:
方法一:生成全量日期后筛选
先生成覆盖目标时间段的所有日期,再筛选出日部分在20-25之间的日期:
WITH date_range AS ( SELECT date FROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 DAY)) AS date ) SELECT date FROM date_range WHERE EXTRACT(DAY FROM date) BETWEEN 20 AND 25 ORDER BY date;
你可以根据需求调整GENERATE_DATE_ARRAY的起始和结束日期,比如把2020-01-01换成需要的最早日期,CURRENT_DATE()换成指定的结束日期。
方法二:按月生成目标日期区间
先生成每个月的起始日期,再基于此生成当月20-25日的日期:
WITH months AS ( SELECT DATE_TRUNC(date, MONTH) AS month_start FROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 MONTH)) AS date ), monthly_dates AS ( SELECT DATE_ADD(month_start, INTERVAL 19 + offset DAY) AS target_date FROM months, UNNEST(GENERATE_ARRAY(0, 5)) AS offset ) SELECT target_date FROM monthly_dates WHERE target_date <= CURRENT_DATE() -- 过滤超出当前日期的未来日期 ORDER BY target_date;
这种方式直接针对每个月生成需要的日期,避免生成多余的日期数据,在日期范围较大时性能更优。
内容的提问来源于stack exchange,提问作者farin irzani
相关产品推荐
相关产品推荐

