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_DATE | BUS_DAT |
|---|---|
| 03-FEB-23 | 05-FEB-23 |
内容的提问来源于stack exchange,提问作者sivakumar V
相关产品推荐
相关产品推荐

