You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中GENERATE_DATE_ARRAY的INTERVAL月末日期异常问询

问题原因及解决方法

这不是Bug,是GENERATE_DATE_ARRAY的逻辑特性导致的。你用的起始日期是2020-12-31,函数会按这个日期的日分量(31号)逐月累加:

  • 第一次加1个月:2020-12-31 + 1个月 → 2021-01-31(正常,1月有31日)
  • 第二次加1个月:2021-01-31 + 1个月 → 二月没有31日,自动调整为当月最后一天2021-02-28
  • 之后每次加1个月,都是基于28日计算,所以三月变成2021-03-28,四月2021-04-28,直到结束日期自然全是28日。

正确实现方式

要生成两个日期之间的所有月末日期,推荐以下两种方法:

方法一:先生成每月第一天,再转月末

SELECT
  ARRAY(
    SELECT LAST_DAY(day, MONTH)
    FROM UNNEST(GENERATE_DATE_ARRAY('2021-01-01', '2022-03-01', INTERVAL 1 MONTH)) AS day
  ) AS eom_dates

方法二:结合DATE_ADD与LAST_DAY生成序列

SELECT
  ARRAY(
    SELECT LAST_DAY(DATE_ADD('2020-12-31', INTERVAL i MONTH), MONTH)
    FROM UNNEST(GENERATE_ARRAY(0, DATE_DIFF('2022-03-31', '2020-12-31', MONTH))) AS i
  ) AS eom_dates

这两种方法都能准确生成2020-12-31、2021-01-31、2021-02-28、2021-03-31……直到2022-03-31的所有月末日期。

内容的提问来源于stack exchange,提问作者nicodds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:50:22