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

已知last_day与date_part(dow,date),如何获取以周日为始的指定日期周首日?

获取以周日为起始的周第一天的解决方案

没问题!针对你需要获取给定日期所在周(周日为起始)的第一天这个需求,我给你几个实用的PostgreSQL解决方案:

  • 方法一:通过星期偏移量计算
    因为date_part('dow', date)返回的数值中,0代表周日、1代表周一……6代表周六。我们只需要用目标日期减去当前日期对应的dow数值天数,就能得到本周的起始周日。
    示例代码:

    -- 直接计算写法
    SELECT date '2018-02-14' - (date_part('dow', date '2018-02-14')::INT) * INTERVAL '1 day';
    -- 简化写法
    SELECT date '2018-02-14' - (date_part('dow', date '2018-02-14') || ' days')::INTERVAL;
    

    针对你的示例日期2018-02-14,date_part('dow', ...)返回3(周三),减去3天后正好得到2018-02-11(周日)。

  • 方法二:利用date_trunc调整起始日
    PostgreSQL默认的date_trunc('week', date)是以周一作为周起始的,我们可以先截断到周一,再往前推1天得到周日:

    SELECT date_trunc('week', date '2018-02-14')::DATE - INTERVAL '1 day';
    

    这个方法逻辑直观,适合习惯使用date_trunc函数的场景。

  • 方法三:封装成自定义函数(复用场景)
    如果需要频繁使用这个逻辑,可以封装成一个自定义函数,调用起来更方便:

    CREATE OR REPLACE FUNCTION week_start_sunday(p_date DATE)
    RETURNS DATE AS $$
    BEGIN
      RETURN p_date - (date_part('dow', p_date)::INT) * INTERVAL '1 day';
    END;
    $$ LANGUAGE plpgsql IMMUTABLE;
    

    使用时直接传入日期即可:

    SELECT week_start_sunday('2018-02-14'); -- 返回结果:2018-02-11
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:12:39