2016-07-28 18 views
0

oracleInput DateおよびFrequency(Yearly,half yearly, Quarterly)に基づいて次の日付を計算する関数またはプロシージャを探しています。例えばPL/SQL - 頻度に基づく日付

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

答えて

1

月次、四半期、年間の結果を得るためにOracleの機能ADD_MONTHS(date, number_months)を見てみましょう。

たとえば、次の四半期は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   
関連する問題