Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DB2-基于两个字段确定未来日期_Db2_Db2 Luw - Fatal编程技术网

DB2-基于两个字段确定未来日期

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

我需要在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的日期

以下是我目前掌握的情况:

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的值,但返回的是什么?