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

查找谷歌BigQuery中next_day函数的替代实现方案

BigQuery实现NEXT_DAY功能的替代方案

BigQuery原生未内置NEXT_DAY函数,你可以通过以下两种方案实现相同效果:

需求参考(其他数据库用法):

SELECT NEXT_DAY(Current_date,'TUE');

预期效果:返回当前日期之后的第一个星期二。


方案1:直接用日期函数组合实现

核心逻辑是通过EXTRACT获取当前日期的星期序号,计算和目标星期的间隔天数后用DATE_ADD补全。
BigQuery中EXTRACT(DAYOFWEEK FROM 日期)返回的星期序号规则为:周日=1,周一=2,周二=3,周三=4,周四=5,周五=6,周六=7。
示例代码(获取下一个周二):

SELECT 
  DATE_ADD(
    CURRENT_DATE(), 
    INTERVAL MOD(7 + 3 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()), 7) DAY
  ) AS next_tuesday;

你可以根据需求替换代码中的3为目标星期对应的序号,即可实现其他星期的查询。


方案2:封装为自定义函数(UDF),兼容原NEXT_DAY用法

你可以把逻辑封装为临时函数,用法和其他数据库的NEXT_DAY完全一致,适合频繁调用的场景:

-- 定义临时NEXT_DAY函数
CREATE TEMP FUNCTION NEXT_DAY(input_date DATE, target_weekday STRING) AS (
  DATE_ADD(
    input_date,
    INTERVAL MOD(
      7 + 
      CASE UPPER(target_weekday)
        WHEN 'SUN' THEN 1
        WHEN 'MON' THEN 2
        WHEN 'TUE' THEN 3
        WHEN 'WED' THEN 4
        WHEN 'THU' THEN 5
        WHEN 'FRI' THEN 6
        WHEN 'SAT' THEN 7
      END 
      - EXTRACT(DAYOFWEEK FROM input_date),
      7
    ) DAY
  )
);

-- 调用方式和其他数据库完全一致
SELECT NEXT_DAY(CURRENT_DATE(), 'TUE') AS next_tuesday;

额外说明

  • 函数支持传入的星期缩写为SUN/MON/TUE/WED/THU/FRI/SAT,不区分大小写
  • 如果需要排除当天(比如当天是周二时,返回下一周的周二而非当天),只需要把函数内的input_date替换为DATE_ADD(input_date, INTERVAL 1 DAY)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:02