数据库 – 在Microsoft Access(2010)中计算年和月的年龄

我有两个领域(体检日期和出生日期).我计算了年龄((体检日期 – 出生日期)/365.25).我想要做的是在单独的领域中计算年和月的年龄.我不确定是否可以使用代码生成器或某种方式完成.

解决方法

虽然DateDiff()函数似乎是计算年龄的合理选择,但遗憾的是它并不计算两个日期之间经过的整年或月数.例如,假设一个婴儿出生于2014年12月31日,并在2015年1月2日48小时后进行了检查.也就是说,
DateOfBirth = DateSerial(2014,12,31)
DateOfExam = DateSerial(2015,1,2)

如果我们只是使用DateDiff()来计算考试时的年和月的“年龄”,我们就会得到

?DateDiff("yyyy",DateOfBirth,DateOfExam)
 1 
?DateDiff("m",DateOfExam)
 1

因此,我们会报告婴儿是1岁零1个月,而实际上她只有2天大.

适当的年龄计算需要比这更复杂.以下VBA函数将计算年和月的“年龄”,返回“2年1个月”之类的字符串:

Public Function AgeInYearsAndMonths(StartDate As Variant,EndDate As Variant) As Variant
    Dim Date1 As Date,Date2 As Date
    Dim mm1 As Integer,dd1 As Integer,mm2 As Integer,dd2 As Integer
    Dim ageYears As Integer,ageMonths As Integer,rtn As Variant
    rtn = Null
    If Not (IsNull(StartDate) Or IsNull(EndDate)) Then
        If StartDate <= EndDate Then
            Date1 = StartDate
            Date2 = EndDate
        Else
            Date1 = EndDate
            Date2 = StartDate
        End If
        mm1 = Month(Date1)
        dd1 = Day(Date1)
        mm2 = Month(Date2)
        dd2 = Day(Date2)
        ageYears = DateDiff("yyyy",Date1,Date2)
        If (mm1 > mm2) Or (mm1 = mm2 And dd1 > dd2) Then
            ageYears = ageYears - 1
        End If
        ageMonths = DateDiff("m",Date2) Mod 12
        If dd1 > dd2 Then
            If ageMonths = 0 Then
                ageMonths = 12
            End If
            ageMonths = ageMonths - 1
        End If
        If ageYears = 0 And ageMonths = 0 Then
            rtn = "less than 1 month"
        Else
            rtn = ageYears & " year" & IIf(ageYears = 1,"","s") & " and " & ageMonths & " month" & IIf(ageMonths = 1,"s")
        End If
    End If
    AgeInYearsAndMonths = rtn
End Function

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03