5

有谁知道如何计算两个日期字段之间的工作日数?我正在使用 oracle sql 开发人员。我需要找到多个开始日期和结束日期之间的工作日平均值。所以我需要计算每条记录的天数,以便将它们平均出来。这可以在SELECT我的查询部分中作为一行来完成吗?

4

3 回答 3

11

这个答案类似于 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

计数是包容性的,这意味着它包括FromDateThruDate。此查询假定您的日期没有时间组件;如果他们这样做,您将需要TRUNC子查询中的日期列。

于 2013-08-30T14:01:32.287 回答
3

您可以通过以下方式进行操作:

假设我们想知道在这个例子中start_date='01.08.2013'和之间有多少个工作日,并且是字符串文字。如果您的and是数据类型,则 不需要该函数:end_date='04.08.2013'start_dateend_datestart_dateend_datedateTO_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 
于 2013-08-30T13:58:05.200 回答
-1

在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)作为工作日;

于 2017-08-24T14:50:26.627 回答