【发布时间】:2019-06-23 22:09:58
【问题描述】:
我们正在使用 Oracle 11。
在我们的 CASE WHEN 语句中,我需要检查两个日期之间的天数是否大于 3 个工作日(因此不包括周末和节假日)。
CASE WHEN end_date - start_date > 3 THEN 0 --> this includes weekend
and holidays
WHEN CODE = 1 THEN 1
WHEN CODE =2 THEN 2
ELSE 3
END AS MyColumn
假设我有一个假期日历表,其中包含所有假期的列 HolidayDates,例如:2018 年 12 月 25 日、2018 年 12 月 31 日等。
HolidayDates
12/25/2018
12/31/2018
如果
日期 1 = 2019 年 1 月 2 日(星期三)
日期 2 = 2018 年 12 月 27 日(星期四)
Date1 和 Date2 之间的工作日数为 3 天(12/27、12/28 和 12/31)。
下面的查询将得到不包括周末的工作日数。
如何在此查询中排除节假日?
SELECT TO_CHAR( start_date, 'YYYY-MM-DD "("DY")"') AS start_date,
( TRUNC( end_date, 'IW' ) - TRUNC( start_date, 'IW' ) ) * 5 / 7
+ LEAST( TRUNC( end_date ) - TRUNC( end_date, 'IW' ) + 1, 5 )
- LEAST( TRUNC( start_date ) - TRUNC( start_date, 'IW' ), 5 )
AS Num_Week_Days
FROM table_name;
谢谢。
【问题讨论】:
-
Oracle 没有内置任何东西来处理公共假期。您需要创建自己的表格来保存它们。 Have a pipe at this previous answer。如果这没有帮助,还有很多其他人需要检查。 Find them here.
-
- (select COUNT(*) from HolidayDates where HolDate between start_date+1 and end_date)? -
您好,我有自己的假期日历表,其中包含上面提到的 HolidayDates 列。
-
这是this question 的后续版本,可能与stackoverflow.com/questions/43632677/… 重复