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

请求协助编写PL/SQL查询:提取指定日期前2个工作日数据(排除周末)

PL/SQL 查询实现:提取指定日期前2个工作日的数据

核心逻辑分析

根据需求,需针对指定日期Effective_date计算对应的两个前序工作日(仅周一至周五,排除周末),具体对应关系如下:

  • 周一:上周四、上周五
  • 周二:上周五、本周一
  • 周三至周五:紧邻的前两个工作日(如周三对应周一、周二)
  • 周六:本周四、本周五
  • 周日:本周四、本周五

直接SQL查询方案

通过CASE语句结合日期偏移计算目标工作日,直接筛选数据(假设表名为your_table,日期列名为date_column,输入日期通过绑定变量:p_effective_date传入):

SELECT *
FROM your_table
WHERE date_column IN (
    -- 计算较近的前序工作日
    CASE TO_CHAR(:p_effective_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
        WHEN 'MON' THEN :p_effective_date - 3
        WHEN 'SUN' THEN :p_effective_date - 2
        ELSE :p_effective_date - 1
    END,
    -- 计算较远的前序工作日
    CASE TO_CHAR(:p_effective_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
        WHEN 'MON' THEN :p_effective_date - 4
        WHEN 'TUE' THEN :p_effective_date - 4
        WHEN 'SUN' THEN :p_effective_date - 3
        ELSE :p_effective_date - 2
    END
);

可复用PL/SQL函数方案

如果需要重复调用该逻辑,可创建返回日期集合的函数:

CREATE OR REPLACE FUNCTION get_previous_two_workdays(p_effective_date DATE)
RETURN SYS.ODCIDATELIST
IS
    v_near_workday DATE;
    v_far_workday DATE;
BEGIN
    -- 确定较近的前序工作日
    CASE TO_CHAR(p_effective_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
        WHEN 'MON' THEN v_near_workday := p_effective_date - 3;
        WHEN 'SUN' THEN v_near_workday := p_effective_date - 2;
        ELSE v_near_workday := p_effective_date - 1;
    END CASE;
    
    -- 确定较远的前序工作日
    CASE TO_CHAR(p_effective_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH')
        WHEN 'MON' THEN v_far_workday := p_effective_date - 4;
        WHEN 'TUE' THEN v_far_workday := p_effective_date - 4;
        WHEN 'SUN' THEN v_far_workday := p_effective_date - 3;
        ELSE v_far_workday := p_effective_date - 2;
    END CASE;
    
    RETURN SYS.ODCIDATELIST(v_near_workday, v_far_workday);
END;
/

调用函数查询数据:

SELECT t.*
FROM your_table t
JOIN TABLE(get_previous_two_workdays(:p_effective_date)) w
ON t.date_column = w.column_value;

注意事项

  • NLS_DATE_LANGUAGE=ENGLISH用于统一星期缩写的判断标准,避免因数据库语言环境不同导致逻辑错误。
  • 当前逻辑仅排除周末,若需额外排除法定节假日,需扩展逻辑引入节假日表进行校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:41:12