查找谷歌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
相关产品推荐
相关产品推荐

