首页 > 解决方案 > 如何在 Oracle 假期前获得最后一个工作日

问题描述

需要一些甲骨文的帮助..

我需要从 sysdate 获取第 1 天,假期和周末将被排除在外。

对于假期,我们需要获取假期前最后一个工作日的范围。

开始日期和结束日期将来自我的假期表。

例如:假期表

假日名称 开始日期 结束日期
假期1 21 年 8 月 5 日 21 年 8 月 6 日

条件:此查询于 2021 年 8 月 9 日运行

预期结果:21 年 8 月 4 日

我尝试了一些查询和功能,但我无法得到我需要的东西。

非常感谢您的帮助!

标签: oracle

解决方案


您可以使用简单的 case 表达式来确定您的假期开始于一周中的哪一天,然后根据该日期减去天数。

WITH
    holiday (holidayname, start_date, end_date)
    AS
        (SELECT 'holiday1', DATE '2021-8-5', DATE '2021-8-6' FROM DUAL
         UNION ALL
         SELECT 'Christmas', DATE '2021-12-25', DATE '2021-12-26' FROM DUAL
         UNION ALL
         SELECT 'July 4th', DATE '2021-7-4', DATE '2021-7-5' FROM DUAL)
SELECT holidayname,
       start_date,
       end_date,
       start_date - CASE TO_CHAR (start_date, 'Dy') WHEN 'Mon' THEN 3 WHEN 'Sun' THEN 2 ELSE 1 END    AS prior_business_day
  FROM holiday;
   HOLIDAYNAME    START_DATE     END_DATE    PRIOR_BUSINESS_DAY
______________ _____________ ____________ _____________________
holiday1       05-AUG-21     06-AUG-21    04-AUG-21
Christmas      25-DEC-21     26-DEC-21    24-DEC-21
July 4th       04-JUL-21     05-JUL-21    02-JUL-21

推荐阅读