2015-02-23 193 views
-4

我是Oracle Sql开发人员(11g)的新手。我被要求带回添加日期和当前sysdate之间的工作日数。总日数应不包括周末以及在日历表中列为假期的日期。下面是桌子的样品:Sql计算两个日期之间的天数,不包括周末和假日表中的日期

Process Request 
ID Added_date 
1 20-Feb-15 
2 12-Dec-14 
3 11-Nov-14 

假期表:

Holiday_date 
1-Jan-15 
19-Jan-15 
16-Feb-15 

感谢。

+0

还有,你试过吗? – 2015-02-23 21:11:21

+0

@JackManey ..我的歉意我忘了提及。我已经获得了sysdate和added_date之间的日期差异。 – 2015-02-23 21:26:07

+0

好的,现在你怎么知道给定的日期是否在周末? – 2015-02-23 21:32:32

回答

0

这是一个(有点)复杂的问题,至少据我所知,因为您必须检索给定日期范围内的所有日期,然后检查每个日期以查看它是周末日还是if这是一个假日。以下是我如何去做这件事:

WITH d1 AS (
    SELECT id, added_date 
     , added_date + LEVEL AS range_date 
     FROM process_request 
    CONNECT BY added_date + LEVEL < TRUNC(SYSDATE+1) 
     AND PRIOR id = id 
     AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL 
) 
SELECT d1.id, d1.added_date, TRUNC(SYSDATE), COUNT(*) AS business_day_cnt 
    FROM d1 
WHERE TO_CHAR(d1.range_date) NOT IN ('SAT','SUN') 
    AND NOT EXISTS (SELECT 1 FROM holiday_table ht 
        WHERE TRUNC(ht.holiday_date) = TRUNC(d1.range_date)) 
GROUP BY d1.id, d1.added_date 
ORDER BY id 

我会把SQL小提琴放在一起,但我现在有问题连接。在我们的CTE(d1)中,我使用CONNECT BYLEVEL获取added_date与今天的日期(包括今天的日期,但不包括added_date)之间的所有日期。然后我得到了所有这些日子中的id的一个计数,不包括那些周末的日子和那些与HOLIDAY_TABLE中给出的日期相对应的日子。

更新 - SQL Fiddle Here

相关问题