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

SQL Athena中date_part函数未注册:如何获取最近的周日?

在Athena中获取最近的周日(或任意指定星期几)

嘿,这个问题我熟!Athena用的是Presto/Trino引擎,和Redshift的函数体系不一样,所以date_part在这里用不了,但咱们有更合适的方法来实现需求:

获取最近的周日

这里有两种简单的写法,你可以选顺手的:

方法1:用extract()结合条件判断

Athena里extract(dow FROM 日期)会返回0(周日)到6(周六)的数字,我们可以根据这个来计算:

SELECT 
  CASE 
    WHEN extract(dow FROM current_date) = 0 THEN current_date
    ELSE date_add('day', -extract(dow FROM current_date), current_date)
  END AS most_recent_sunday;

逻辑很直观:如果当天就是周日,直接返回;否则减去当前日期对应的dow数值,就能回到最近的周日。

方法2:用date_trunc快速截断

Athena的date_trunc支持指定一周的起始日,把周日设为周起始后,直接截断到周就能得到最近的周日:

SELECT date_trunc('week', current_date, 7)::date AS most_recent_sunday;

这里的7就是指定周日作为一周的第一天,截断后转成date类型就得到了目标日期,是不是更简洁?

获取任意指定的星期几

如果要获取最近的某一天(比如周三、周五),可以基于上面的逻辑调整。我们先定义目标星期几的dow值(0=周日,1=周一,…6=周六),然后计算:

WITH target_day AS (
  SELECT 3 AS target_dow -- 这里改成你要的星期几,比如3=周三
)
SELECT 
  CASE 
    WHEN extract(dow FROM current_date) >= target_dow THEN 
      date_add('day', target_dow - extract(dow FROM current_date), current_date)
    ELSE 
      date_add('day', target_dow - extract(dow FROM current_date) - 7, current_date)
  END AS most_recent_target_day
FROM target_day;

举个例子:如果今天是周五(dow=5),要找最近的周三(dow=3),因为5>=3,所以用3-5=-2,也就是往前推2天,正好是周三;如果今天是周二(dow=2),要找周三的话,2<3,就用3-2-7=-6,往前推6天就是上周三,也就是最近的那一天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:32