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

如何在Big Query中获取任意年份11月第四个周五的日期

在BigQuery中获取任意年份11月的第四个周五日期

核心思路

11月的第四个周五必然落在当月的22日至28日区间内(第一个周五最早为1日,第四个即为22日;第一个周五最晚为7日,第四个即为28日)。基于这个规律,可以通过以下几种方式快速计算:

方法一:简洁单行查询(单个年份)

直接以11月22日为基准,调整到最近的周五:

SELECT
  DATE_ADD(
    DATE('2024-11-22'), -- 替换为目标年份的11月22日,如DATE('2025-11-22')
    INTERVAL (6 - EXTRACT(DAYOFWEEK FROM DATE('2024-11-22'))) % 7 DAY
  ) AS fourth_friday_november;

逻辑说明:

  • BigQuery中EXTRACT(DAYOFWEEK FROM date)返回1(周日)到7(周六)的数值
  • (6 - DAYOFWEEK) % 7计算出从22日到目标周五需要添加的天数:
    • 若22日是周五,结果为0,直接返回22日
    • 若22日是周六,结果为6,添加6天后得到28日(当月第四个周五)
    • 其他日期则自动计算到周五的间隔天数

方法二:批量处理多个年份

如果需要一次性计算多个年份的结果,可以结合GENERATE_ARRAY生成年份列表:

WITH target_years AS (
  SELECT year
  FROM UNNEST(GENERATE_ARRAY(2020, 2030)) AS year -- 替换为需要的年份范围
),
november_22nd AS (
  SELECT DATE(year, 11, 22) AS base_date, year
  FROM target_years
)
SELECT
  year,
  DATE_ADD(
    base_date,
    INTERVAL (6 - EXTRACT(DAYOFWEEK FROM base_date)) % 7 DAY
  ) AS fourth_friday_november
FROM november_22nd
ORDER BY year;

方法三:从11月1日推导(直观逻辑)

先找到11月的第一个周五,再加上21天(3周)得到第四个周五:

-- 单个年份示例
WITH november_first AS (
  SELECT DATE('2024-11-01') AS first_day
),
first_friday AS (
  SELECT
    first_day + INTERVAL 
      CASE 
        WHEN EXTRACT(DAYOFWEEK FROM first_day) = 1 THEN 5 -- 1号是周日,加5天到周五
        ELSE 6 - EXTRACT(DAYOFWEEK FROM first_day) + 1 -- 其他日期计算到周五的天数
      END DAY AS first_fri_date
  FROM november_first
)
SELECT first_fri_date + INTERVAL 21 DAY AS fourth_friday_november
FROM first_friday;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:25:13