根据开始日期和今天的日期

时间:2017-09-13 16:30:34

标签: database date ms-access expression

我有一张表跟踪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/15/2017,但周六,我的pay_date = 10/15/2017。 2017年10月16日,我希望我的pay_date为11/14/2017

1 个答案:

答案 0 :(得分: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 
相关问题