2017-05-26 10 views
1

私は2つの日付列を持ち、週末を除く2つの日付間の日数を測定しようとしています。私は負の数を取得しており、解決の助けが必要です。Oracle:2つの日付の間の日数と平日を除外する日数負の数を処理する方法

CalendarDate DayNumber FirstAssgn FirstCnt DayNumber2 Id BusinessDays 
5/21/2017  Sunday  5/21/17  5/21/17 Sunday 1  -1 

問合せ:

TRUNC(TO_DATE(A.FIRST_CONTACT_DT, 'DD/MM/YYYY')) - TRUNC(TO_DATE(A.FIRST_ASSGN_DT, 'DD/MM/YYYY')) 
- ((((TRUNC(A.FIRST_CONTACT_DT,'D'))-(TRUNC(A.FIRST_ASSGN_DT,'D')))/7)*2) 
    - (CASE WHEN TO_CHAR(A.FIRST_ASSGN_DT,'DY','nls_date_language=english') ='SUN' THEN 1 ELSE 0 END) 
- (CASE WHEN TO_CHAR(A.FIRST_CONTACT_DT,'DY','nls_date_language=english')='SAT' THEN 1 ELSE 0 END) 
- (SELECT COUNT(1) FROM HUM.CALENDAR CAL 
        WHERE 1=1 
        AND CAL.CALENDAR_DATE >= A.FIRST_ASSGN_DT 
        AND CAL.CALENDAR_DATE < A.FIRST_CONTACT_DT 
        --BETWEEN A.FIRST_ASSGN_DT AND A.FIRST_CONTACT_DT      
        AND CAL.GRH_HOLIDAY_IND = 'Y' 
               ) AS Business_Days 

は作品が編集を必要とし、以下のように見える...

- (CASE WHEN TO_CHAR(A.FIRST_ASSGN_DT,'DY','nls_date_language=english')='SUN' THEN 1 ELSE 0 END) 
+0

あなたは 'FirstCnt - FirstAssgn'週末を除きたいですか?あなたのサンプルデータで '-1'の役割は何ですか?サンプルでは両方の日付が同じです。あなたはより良いサンプルと期待される出力を与えることができますか? – Utsav

+1

1+ TO_CHARの 'nls_date_language = ...'を適切に使用するために –

答えて

1

my answer hereから適応:

は数を取得します両方の週の月曜日の間の日数(NLS_LANGUAGEとして月曜日を見つける独立方法としてTRUNC(datevalue, 'IW')を使用)を追加し、曜日(月曜日= 1、火曜日= 2など)を週末を無視するために最大5 )を指定し、開始日の曜日を減算します。このように:

SELECT (TRUNC(end_date, 'IW') - TRUNC(start_date, 'IW')) * 5/7 
     + LEAST(end_date - TRUNC(end_date, 'IW') + 1, 5) 
     - LEAST(start_date - TRUNC(start_date, 'IW') + 1, 5) 
      AS WeekDaysDifference 
FROM your_table 
関連する問題