在Oracle SQL Developer中用CASE与函数实现下一个工作日判断
Oracle 计算指定日期下一个工作日并结合CASE判断
1. 创建自定义函数获取下一个工作日
先创建PL/SQL函数GET_NEXT_WORKDAY,用于计算输入日期的下一个工作日(默认跳过周六、周日,需支持节假日可扩展):
CREATE OR REPLACE FUNCTION GET_NEXT_WORKDAY(p_start_date DATE) RETURN DATE IS v_next_day DATE; BEGIN -- 先获取当前日期的下一天 v_next_day := p_start_date + 1; -- 循环跳过周末,直到得到工作日 WHILE TO_CHAR(v_next_day, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN') LOOP v_next_day := v_next_day + 1; END LOOP; RETURN v_next_day; END; /
函数说明
- 用
NLS_DATE_LANGUAGE=ENGLISH指定周几标识为英文,避免数据库语言设置差异导致的判断错误 - 通过循环跳过周六(SAT)和周日(SUN),确保返回值为下一个工作日
- 若需兼容节假日,可在函数中加入节假日表查询逻辑,判断
v_next_day是否为节假日,若是则继续往后递推
2. 结合CASE语句实现需求逻辑
直接在SQL中调用上述函数,结合CASE完成判断:
SELECT start_date, end_date, CASE WHEN GET_NEXT_WORKDAY(start_date) = end_date THEN 0 ELSE 1 END AS is_not_next_workday FROM your_table_name;
逻辑说明
- 当
start_date的下一个工作日等于end_date时,返回0 - 其余所有情况返回
1
内容的提问来源于stack exchange,提问作者CAT
相关产品推荐
相关产品推荐

