2017-09-13 58 views
0

我有一个表跟踪first_pay_date,期限(付款期限,每行不同)和last_pay_date。我添加了一个字段pay_date,它会显示下一个付款日期,假设付款是每个月按时完成的...付款时间表。我需要pay_date字段根据今天的日期显示下一个付款日期,并且一直显示到今天的日期= last_pay_date /期限的长度。 我尝试过使用各种IIf语句,并且这个返回的日期是基于今天的日期,但我仍然需要它每个月都返回一个日期,这个日期是几个月(即36)的整个期限,而不仅仅是第一次付款后的30天这永远不会改变日期:根据开始日期和当天日期返回设定期限的月到期日期

=IIf([first_pay_date]>=Date(),[first_pay_date],DateAdd("d",30,[first_pay_date])) 

也许一个表达式是不是要走的路,我需要创建一个临时表来存储付款日期或两者的组合,甚至可能使用和未来的查询。我试图寻找这个,但无法找到答案,但我觉得这是存在的东西,我只是不正确搜索。如果有人能指点我正确的方向,我将不胜感激。我的数据来自我导入到访问数据库的excel文件。我可以根据现有字段的计算添加字段,但文件中的数据是我必须工作的,所以我没有收到付款日期。

的样本数据:

first_pay_date | last_pay date | term 

9/15/2017  | 8/15/2020  | 36 

9/5/2017  | 8/5/2019  | 24 

基于今天的日期我pay_date = 9 /二千零一十七分之十五但上周六,我pay_date = 10/15/2017年在2017年10月16日,我希望我的pay_date是2017年11月14日

回答

0

可能是这样的:

=IIf(DateAdd("d", 36 * 30, first_pay_date) > Date(), Null, DateAdd("d", (-Int(DateDiff("d", Date(), first_pay_date)/30) * 30, first_pay_date)) 

更正:

=IIf(DateAdd("d", 36 * 30, first_pay_date) > Date(), Null, DateAdd("d", (-Int(DateDiff("d", Date(), first_pay_date)/30) + 1) * 30, first_pay_date)) 

为了模拟:

first_pay_date=DateAdd("d", -36 * 30, Date) 
today = DateAdd("d", 60, Date) 

? IIf(DateAdd("d", 36 * 30, first_pay_date) > today, Null, DateAdd("d", (-Int(DateDiff("d", today, first_pay_date)/30) + 1) * 30, first_pay_date)) 

Result: 2017-12-13 
+0

谢谢你的回应。我收到一个错误:“你输入的表达式有一个包含错误数量参数的函数。”如果(DateAdd(“d”,36 * 30,first_pay_date)> Date()评估为“True”,则将返回“Null”,但(DateAdd(“d”,36 * 30,first_pay_date)计算last_pay_date,已经知道了,这对DateAdd和DateDiff的耦合是有帮助的 – TechEng

+0

这是空码,请参考更正的答案 – Gustav

+0

我没有收到错误,但它只是返回一个“空”值,无论我的第一个付款日期是什么。无论是过去还是未来,都会返回一个“空” – TechEng

相关问题