2017-09-13 91 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

相關問題