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

Oracle中如何判断指定日期是否为周五并调整为周日

Oracle日期调整:周五转周日实现方案

核心需求

判断给定日期是否为周五,若是则调整为当日之后的周日;若不是,则保持原日期不变。示例:输入03-FEB-23(周五),输出05-FEB-23(周日)。

实现方案

1. 通用SQL查询(不依赖NLS配置)

利用ISO周(IW)的特性(ISO周以周一为第一天),周一加4天即为周五,通过CASE表达式判断并调整:

SELECT 
    cu_date,
    CASE 
        WHEN cu_date = TRUNC(cu_date, 'IW') + 4 THEN cu_date + 2  -- 周五加2天跳转至周日
        ELSE cu_date 
    END AS bus_dat
FROM 
    (SELECT TO_DATE('03-FEB-23', 'DD-MON-RR') AS cu_date FROM DUAL);

2. 基于星期数字的判断(需注意NLS配置)

若数据库默认周日为一周第一天(美式配置),周五对应TO_CHAR返回数字6,可直接判断:

SELECT 
    cu_date,
    CASE 
        WHEN TO_CHAR(cu_date, 'D') = '6' THEN cu_date + 2
        ELSE cu_date 
    END AS bus_dat
FROM 
    (SELECT TO_DATE('03-FEB-23', 'DD-MON-RR') AS cu_date FROM DUAL);

注意:若数据库以周一为一周第一天,周五对应数字为5,需修改判断条件为WHEN TO_CHAR(cu_date, 'D') = '5'

3. 自定义函数(复用场景)

如果需要多次调用该逻辑,可封装为函数:

CREATE OR REPLACE FUNCTION adjust_friday_to_sunday(p_date IN DATE) RETURN DATE IS
BEGIN
    RETURN CASE 
               WHEN p_date = TRUNC(p_date, 'IW') + 4 THEN p_date + 2
               ELSE p_date
           END;
END adjust_friday_to_sunday;
/

-- 调用示例
SELECT adjust_friday_to_sunday(TO_DATE('03-FEB-23', 'DD-MON-RR')) AS bus_dat FROM DUAL;

示例运行结果

CU_DATEBUS_DAT
03-FEB-2305-FEB-23

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:21