DB2 - 根据两个字段确定未来日期

时间:2014-10-08 17:40:24

标签: db2 db2-luw

我需要在DB2 for UNIX中计算一个日期。

我有一个日期字段:     CONTRACT_DT(例子:     2006年2月7日,     2006年8月25日,     2007/11/16,     2008年2月25日,     2005年12月29日)

一个类型字段     PRIME(例如:C,I,E,Z,V,K)

我需要计算贷款审核的下一个日期(REVIEW_DT)。

  • 如果Prime = Z,那么每年都来自CONTRACT_DT
  • 如果Prime = V,那么每三年一次来自CONTRACT_DT
  • 如果Prime = K,则每五年从CONTRACT_DT
  • 如果Prime = NULL或任何其他字母,则为NULL

一个例子是贷款01的CONTRACT_DT为3/1/2004,其PRIME为V. 所以我需要计算/添加三年到3/1/2004,直到我得到一个大于MTHLY_CLOSE_DT的日期。 (选项将是2007年,2010年,2013年,2016年,2019,2022) 所以正确答案是3/1/2016。

我意识到结构是CASE语句,但我不知道如何根据年份倍数选择日期并找到大于MNTHLY_CLOSE_DT的日期。

这是我到目前为止所拥有的:

CREATE PROCEDURE "FINANCE"."AL_LOOP_TEST"(OUT r_rvdt DATE)
BEGIN ATOMIC

  DECLARE v_tmgi DATE;
  DECLARE v_ctdt DATE;
  DECLARE v_rvdt DATE;    
SET v_tmgi = '2014-09-01';  --Close month
SET v_ctdt = '2012-06-02';  -- CONTRACT_DT
SET v_rvdt = v_ctdt;  -- Starting Value for v_rvdt

WHILE (v_rvdt < v_tmgi)  -- While Review Dt is less than Close Month
  DO
  SET v_rvdt = (v_rvdt  + 5 YEAR); -- Add 5 years to date
END WHILE;

  SET r_rvdt = v_rvdt;
END

谢谢!

1 个答案:

答案 0 :(得分:0)

吉米,谢谢你的帮助。这就是我创造的:

CREATE PROCEDURE "X"."AL_LOOP_TEST" ( OUT "R_RVDT" DATE )
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  MODIFIES SQL DATA
  OLD SAVEPOINT LEVEL
BEGIN ATOMIC

 DECLARE v_tmgi DATE;
 DECLARE v_ctdt DATE;
 DECLARE v_rvdt DATE;    
SET v_tmgi = '2014-09-01';  --Close month
SET v_ctdt = '2002-06-02';  -- CONTRACT_DT
SET v_rvdt = v_ctdt;  -- Starting Value for v_rvdt

WHILE (v_rvdt < v_tmgi)  -- While Review Dt is less than Close Month
  DO
  SET v_rvdt = (v_rvdt  + 5 YEAR); -- Add 5 years to date
END WHILE;

  SET r_rvdt = v_rvdt;
END;