DB2-基于两个字段确定未来日期
我需要在DB2forUNIX中计算一个日期 我有一个日期字段: 合同范例: 2/7/2006, 8/25/2006, 11/16/2007, 2/25/2008, 12/29/2005 和一个类型字段 基本示例:C、I、E、Z、V、K 我需要计算贷款审核的下一个日期 如果Prime=Z,则从合同开始每年 如果Prime=V,则从合同开始每三年 如果Prime=K,则从合同开始每五年 如果Prime=NULL或任何其他字母,则为NULL 例如,loan 01的合同日期为2004年3月1日,且PRIME为V。 所以我需要在2004年3月1日之前再加上三年,直到我得到一个比MTHLY_CLOSE_DT更大的日期。期权为2007年、2010年、2013年、2016年、20192022。 所以正确答案是2016年3月1日 我意识到这个结构是一个案例陈述,但我不知道如何根据年份倍数选择一个日期,并找到一个大于MNTHLY_CLOSE_DT的日期 以下是我目前掌握的情况:DB2-基于两个字段确定未来日期,db2,db2-luw,Db2,Db2 Luw,我需要在DB2forUNIX中计算一个日期 我有一个日期字段: 合同范例: 2/7/2006, 8/25/2006, 11/16/2007, 2/25/2008, 12/29/2005 和一个类型字段 基本示例:C、I、E、Z、V、K 我需要计算贷款审核的下一个日期 如果Prime=Z,则从合同开始每年 如果Prime=V,则从合同开始每三年 如果Prime=K,则从合同开始每五年 如果Prime=NULL或任何其他字母,则为NULL 例如,loan 01的合同日期为2004年3月1日,且PRI
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
谢谢 吉米,谢谢你的帮助。这就是我所创造的:
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;
到目前为止,您是否已经尝试过一些sql代码?从我最初的观点来看,你可能需要为这个实现一个循环。不,我在脑海中构建了这个循环,当你指出所有日期的可能性时,我意识到我不知道如何通过循环,然后在第三次接近之后找到第一个,发布代码后,我很乐意尽我所能提供帮助,因为我来自TSQL世界,而不是DB2。如果我们有代码可以帮助您,它将有助于在这个特定的网站上获得更好的答案。看看这个,我添加了起始代码。我没有返回值,看它是否工作。查看代码并简要查看一些DB2 sql,您应该按原样返回r_rvdt的值,但返回的是什么?