oracle - 如何在 Oracle 假期前获得最后一个工作日
问题描述
需要一些甲骨文的帮助..
我需要从 sysdate 获取第 1 天,假期和周末将被排除在外。
对于假期,我们需要获取假期前最后一个工作日的范围。
开始日期和结束日期将来自我的假期表。
例如:假期表
假日名称 | 开始日期 | 结束日期 |
---|---|---|
假期1 | 21 年 8 月 5 日 | 21 年 8 月 6 日 |
条件:此查询于 2021 年 8 月 9 日运行
预期结果:21 年 8 月 4 日
我尝试了一些查询和功能,但我无法得到我需要的东西。
非常感谢您的帮助!
解决方案
您可以使用简单的 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
推荐阅读
- javascript - 是否有任何代理方法允许对象获取默认属性
- php - PHP脚本未将HTML表单数据提交到数据库
- linux - 在 Ubuntu 上更改默认 python3 或卸载一个安装
- reactjs - 如何在 TabBar 中添加图标 (createMaterialTopTabNavigator) ReactNative
- angular - 打开其他垫子菜单时如何隐藏打开的垫子菜单
- android - Flutter 应用抛出 Http Exception 并立即崩溃
- php - 从动态产品页面中选择产品并将其传递到其他页面
- php - 使用 php curl 抓取安全页面?
- sql - 从 MVC 中的主存储过程调用多个存储过程
- vue-cli - magraph:xml to graph 没有出现在我的页面中。(我在Vue-cli中使用了mxgraph)