有谁知道如何计算两个日期字段之间的工作日数?我正在使用 oracle sql 开发人员。我需要找到多个开始日期和结束日期之间的工作日平均值。所以我需要计算每条记录的天数,以便将它们平均出来。这可以在SELECT
我的查询部分中作为一行来完成吗?
3 回答
这个答案类似于 Nicholas 的答案,这并不奇怪,因为您需要一个带有 a 的子查询CONNECT BY
来生成日期列表。然后可以在检查星期几时计算日期。这里的区别在于它显示了如何在结果的每一行上获取工作日计数值:
SELECT
FromDate,
ThruDate,
(SELECT COUNT(*)
FROM DUAL
WHERE TO_CHAR(FromDate + LEVEL - 1, 'DY') NOT IN ('SAT', 'SUN')
CONNECT BY LEVEL <= ThruDate - FromDate + 1
) AS Weekday_Count
FROM myTable
计数是包容性的,这意味着它包括FromDate
和ThruDate
。此查询假定您的日期没有时间组件;如果他们这样做,您将需要TRUNC
子查询中的日期列。
您可以通过以下方式进行操作:
假设我们想知道在这个例子中start_date='01.08.2013'
和之间有多少个工作日,并且是字符串文字。如果您的and是数据类型,则 不需要该函数:end_date='04.08.2013'
start_date
end_date
start_date
end_date
date
TO_DATE()
select count(*) as num_of_weekdays
from ( select level as dnum
from dual
connect by (to_date(end_date, 'dd.mm.yyyy') -
to_date(start_date, 'dd.mm.yyyy') + 1) - level >= 0) s
where to_char(sysdate + dnum, 'DY',
'NLS_DATE_LANGUAGE=AMERICAN') not in ('SUN', 'SAT')
结果:
num_of_weekdays
--------------
2
在https://sqljana.wordpress.com/2017/03/16/oracle-calculating-business-days-between-two-dates-in-oracle/查看我的完整工作功能代码和解释
创建函数后,只需将该函数用作 SELECT 语句的一部分,并传入两个日期列作为开始日期和结束日期,如下所示:
从 YOURTABLE 中选择 Begin_Date、End_Date、fn_GetBusinessDaysInterval(Begin_Date、End_Date)作为工作日;