我目前正在开发一个存储软件许可信息的数据库,例如软件名称,购买日期,成本,数量等......在软件拥有12个月后,我们必须支付维护费。
因此,我的问题是如何设计一个查询,该查询将采用购买日期并计算该日期的下一次出现,以存储在维护日期字段中。例)如果在12/31/1999购买了许可证,我需要在2016年12月31日支付维护费用。
我没有很多MS Access或SQL查询的经验,经过一段时间的研究后,我甚至不确定这是否可行。我很感激你们给我的任何帮助!
答案 0 :(得分:1)
这是一个完全符合要求的功能:
Public Function DateNextAnnualDay( _
ByVal AnnualDay As Date) _
As Date
Dim SomeDate As Date
Dim NextAnnualDay As Date
Dim Years As Integer
SomeDate = Date
NextAnnualDay = AnnualDay
Years = DateDiff("yyyy", AnnualDay, SomeDate)
If Years < 0 Then
' Don't calculate hypothetical annual days.
Else
NextAnnualDay = DateAdd("yyyy", Years, AnnualDay)
If DateDiff("d", SomeDate, NextAnnualDay) <= 0 Then
' Next annual day falls earlier in the year than SomeDate.
NextAnnualDay = DateAdd("yyyy", Years + 1, AnnualDay)
End If
End If
DateNextAnnualDay = NextAnnualDay
End Function
答案 1 :(得分:0)
这是语法
SELECT DateAdd("yyyy",1,[MyDate]) AS MaintDate
FROM Table;
答案 2 :(得分:0)
如果需要进行更复杂的查询,可以在模块中编写函数,然后使用VBA在查询中访问它。例如,您可以遍历循环以匹配条件
Function GetNextDate(ByVal dteOriginalDate As Date) As Date
While dteOriginalDate <= DateTime.Now
dteOriginalDate = DateAdd("Yyyy", 1, dteOriginalDate)
Wend
GetNextDate = dteOriginalDate
End Function
将迭代从原始日期添加一年到将来的日期。您可以将其构建为查询(使用右键单击 - &gt;构建),以便每行都运行代码并应用逻辑。
这将允许您将原始许可日期存储在数据库中,并计算下一个截止日期,而无需知道(或修改)中间年份。