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

月末与周末数据拉取逻辑咨询:周末取前工作日数据

实现月末/非周末数据拉取(周末自动回退至前一个工作日)

需求要点

  • 目标日期为月末日期时,直接拉取对应数据
  • 目标日期为非周末工作日时,直接拉取对应数据
  • 目标日期为**周末(周六/周日)**时,自动回退至最近的前一个工作日并拉取数据

Python 实现方案

借助pandas的工作日偏移工具可以高效处理日期回退,同时兼顾月末校验:

from pandas.tseries.offsets import BusinessDay
import datetime

def get_target_date(input_date):
    # 处理周末回退
    if input_date.weekday() in (5, 6):  # 5=周六,6=周日
        target_date = input_date - BusinessDay(1)
    else:
        target_date = input_date
    
    # 月末校验(确保月末日期被正确保留)
    next_day = target_date + datetime.timedelta(days=1)
    if next_day.month != target_date.month or next_day.day == 1:
        return target_date
    return target_date

# 测试用例
test_dates = [
    datetime.date(2022, 8, 20),  # 周六
    datetime.date(2022, 8, 21),  # 周日
    datetime.date(2023, 8, 31),  # 月末周四
    datetime.date(2023, 9, 30),  # 月末周六
]

for date in test_dates:
    result = get_target_date(date)
    print(f"输入: {date.strftime('%Y-%m-%d')} → 目标: {result.strftime('%Y-%m-%d')}")

说明:

  • BusinessDay(1)会自动跳过周末和法定节假日,如需自定义节假日可传入holidays参数
  • 月末判断逻辑确保即使月末为周末,回退后的工作日仍被正确识别

MySQL 实现方案

用原生SQL函数实现日期判断与回退:

DELIMITER //
CREATE FUNCTION get_target_date(input_date DATE) RETURNS DATE
BEGIN
    DECLARE target_date DATE;
    -- 判断周末(DAYOFWEEK:周日=1,周六=7)
    IF DAYOFWEEK(input_date) IN (1, 7) THEN
        SET target_date = input_date - INTERVAL 1 DAY;
        -- 循环回退直到找到工作日
        WHILE DAYOFWEEK(target_date) IN (1, 7) DO
            SET target_date = target_date - INTERVAL 1 DAY;
        END WHILE;
    ELSE
        SET target_date = input_date;
    END IF;
    
    -- 校验月末
    IF DAY(target_date + INTERVAL 1 DAY) = 1 THEN
        RETURN target_date;
    END IF;
    RETURN target_date;
END //
DELIMITER ;

-- 调用示例
SELECT get_target_date('2022-08-20') AS target_date; -- 返回2022-08-19
SELECT get_target_date('2023-09-30') AS target_date; -- 返回2023-09-29

说明:

  • 若需处理法定节假日,可关联自定义节假日表,在循环中额外判断排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:48:21