Oracle使用dual表查询符合指定规则的工作日日期的实现问题
Oracle 基于dual表的规则工作日查询实现
实现逻辑
- 首先通过
TRUNC(SYSDATE, 'MONTH')获取当月第一天的日期 - 判断当月第一天的星期属性:如果为周日或周一,返回当月第一个周二的日期;其他场景默认返回当月第一天(可根据业务需要调整其他分支的返回逻辑)
- 所有星期判断逻辑固定使用英文星期标识,避免不同数据库NLS环境设置导致的判断异常
完整查询语句
SELECT CASE WHEN TO_CHAR(TRUNC(SYSDATE, 'MONTH'), 'DY', 'NLS_DATE_LANGUAGE = AMERICAN') IN ('SUN', 'MON') THEN NEXT_DAY(TRUNC(SYSDATE, 'MONTH'), 'TUESDAY', 'NLS_DATE_LANGUAGE = AMERICAN') ELSE TRUNC(SYSDATE, 'MONTH') END AS target_work_day FROM DUAL;
效果验证示例
你可以替换SYSDATE为指定日期测试不同场景的返回结果:
- 代入
DATE'2024-09-01'(2024年9月1日为周日):返回结果为2024-09-03 - 代入
DATE'2024-07-01'(2024年7月1日为周一):返回结果为2024-07-02 - 代入
DATE'2024-10-01'(2024年10月1日为周二):返回结果为2024-10-01
内容的提问来源于stack exchange,提问作者cipherda
相关产品推荐
相关产品推荐

