2016-07-28 7 views
0

oracleInput DateFrequency(Yearly,half yearly, Quarterly)을 기준으로 다음 날짜를 계산하는 기능 또는 절차를 찾고 있습니다. 오라클 기능 ADD_MONTHS(date, number_months)에서 예를 들어PL/SQL - 다음 빈도 기준 날짜

Input Date  Frequency Next Occurrence Date 
1-Jan-2016  Quarterly  1-Apr-2016 
1-Jan-2016  yearly  1-Jan-2017 

답변

1

봐는 월별, 분기 별, 연도 별 결과를 얻을 수 있습니다.

예를 들어, 다음 분기는 3 개월입니다. 입력 날짜 1 분기이었다 그래서 만약 당신이 사용할 수 있습니다

ADD_MONTHS(01-JAN-2016, 3) 

는 다음 분기를 얻을 수 있습니다.

예 SQL :

select TO_DATE('01-JAN-2016', 'DD-MON-YYYY') as "Input Date", 
     'Quarterly' as "Frequency", 
     ADD_MONTHS(TO_DATE('01-JAN-2016', 'DD-MON-YYYY'), 3) as "Next Occurrence Date" 
from dual 
union 
select TO_DATE('01-JAN-2016', 'DD-MON-YYYY') as "Input Date", 
     'Yearly' as "Frequency", 
     ADD_MONTHS(TO_DATE('01-JAN-2016', 'DD-MON-YYYY'), 12) as "Next Occurrence Date" 
from dual 
; 

결과 :

@의 tale852150의 대답은 약간 확장
Input Date   Frequency Next Occurrence Date 
------------------ --------- ------------------ 
01-JAN-16   Quarterly 01-APR-16 
01-JAN-16   Yearly 01-JAN-17 
0

, 당신은 당신을 가정, 추가 할 개월 수에 주파수를 변환하는 경우 표현식을 사용할 수 있습니다 가능한 값의 알려진 목록이 있습니다.

add_months(input_date, case frequency 
    when 'Quarterly' then 3 
    when 'Half yearly' then 6 
    when 'Yearly' then 12 else 0 end 

빠른 데모 :

with t (input_date, frequency) as (
    select date '2016-01-01', 'Quarterly' from dual 
    union all select date '2016-01-01', 'Half yearly' from dual 
    union all select date '2016-01-01', 'Yearly' from dual 
) 
select input_date, frequency, 
    add_months(input_date, case frequency 
    when 'Quarterly' then 3 
    when 'Half yearly' then 6 
    when 'Yearly' then 12 else 0 end) as next_occurrence_date 
from t; 

INPUT_DATE FREQUENCY NEXT_OCCURRENCE_DATE 
---------- ----------- -------------------- 
2016-01-01 Quarterly 2016-04-01   
2016-01-01 Half yearly 2016-07-01   
2016-01-01 Yearly  2017-01-01