0

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

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

和一个类型字段 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 为 2004 年 3 月 1 日,PRIME 为 V。所以我需要在 2004 年 3 月 1 日之前计算/添加三年,直到我得到一个大于 MTHLY_CLOSE_DT 的日期。(选项为 2007、2010、2013、2016、2019、2022)。
所以正确答案是 2016 年 3 月 1 日。

我意识到该结构是一个 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

谢谢!

4

1 回答 1

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;
于 2014-10-13T20:45:40.903 回答