我需要在 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
谢谢!