我目前正在开发一个数据库,该数据库存储软件许可信息,如软件名称、购买日期、成本、数量等。软件拥有12个月后,我们必须支付维修费。
因此,我的问题是如何设计一个查询,该查询将获取购买日期并计算要存储在“维护日期”字段中的下一个日期。如果许可证是在1999年12月31日购买的,我需要在2016年12月31日支付维持费。
我对MS或SQL查询没有太多的经验,在研究了一段时间之后,我甚至不确定这是可能的。我很感激你们能给我什么帮助!
发布于 2016-06-22 09:01:37
这里有一个函数可以做到这一点:
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发布于 2016-06-21 15:05:11
这是语法
SELECT DateAdd("yyyy",1,[MyDate]) AS MaintDate
FROM Table;发布于 2016-06-21 15:22:29
如果需要进行更复杂的查询,可以在模块中编写函数,然后使用VBA在查询中访问函数。例如,您可以遍历一个循环来匹配条件。
Function GetNextDate(ByVal dteOriginalDate As Date) As Date
While dteOriginalDate <= DateTime.Now
dteOriginalDate = DateAdd("Yyyy", 1, dteOriginalDate)
Wend
GetNextDate = dteOriginalDate
End Function将从原始日期到未来日期的时间点迭代添加一年。您可以将其构建到一个查询中(使用右键单击-> build),以便每行运行您的代码并应用逻辑。
这将允许您将原始许可日期存储在数据库中,并计算下一个到期日,而不必知道(或修改)中间年份。
https://stackoverflow.com/questions/37947871
复制相似问题