Access如何截取身份证年龄,身份证号计算年龄的公式?

在 Access 数据库中根据身份证号计算年龄

在 Access 中,身份证号(18位)的第 7 到 14 位代表出生日期(格式为 YYYYMMDD),要计算年龄,我们需要先从字符串中截取日期,然后将其转换为日期格式,最后与当前系统日期进行对比。

核心逻辑拆解

  • 截取出生日期字符串:使用 Mid([身份证号], 7, 8)
  • 转换为日期类型:使用 DateSerial 函数,分别提取年、月、日。
  • 计算年龄:用当前年份减去出生年份,并判断今年的生日是否已过,以确保结果精确。

方法一:在查询(Query)中使用表达式

如果你不想编写代码,可以直接在查询的设计视图中,在一个新字段中输入以下表达式。

表达式如下:

年龄: Year(Date()) - Year(DateSerial(Mid([身份证号],7,4), Mid([身份证号],11,2), Mid([身份证号],13,2))) - IIf(Format(Date(),"mmdd") < Format(DateSerial(Mid([身份证号],7,4), Mid([身份证号],11,2), Mid([身份证号],13,2)),"mmdd"), 1, 0)

公式详细解释:

  • DateSerial(Mid([身份证号],7,4), Mid([身份证号],11,2), Mid([身份证号],13,2))
    • Mid([身份证号],7,4):截取第 7-10 位作为年份。
    • Mid([身份证号],11,2):截取第 11-12 位作为月份。
    • Mid([身份证号],13,2):截取第 13-14 位作为日期。
    • DateSerial 将这三个部分组合成一个标准的 Access 日期格式。
  • Year(Date()) - Year(...):用当前年份减去出生年份。
  • IIf(Format(Date(),"mmdd") < Format(...,"mmdd"), 1, 0)
    • 这是精确计算的关键。
    • 它比较“今天的月日”是否小于“生日的月日”。
    • 如果还没到生日,则减去 1 岁,否则减去 0 岁。

方法二:使用 VBA 自定义函数(推荐)

如果你的数据库中经常需要用到这个功能,建议编写一个 VBA 函数,这样在查询、报表或窗体中调用时,公式会非常简洁。

第一步:编写 VBA 代码

  1. Alt + F11 打开 VBA 编辑器。
  2. 点击菜单栏的 插入 -> 模块
  3. 将以下代码粘贴进去:
Public Function GetAgeFromID(IDCard As Variant) As Variant
    On Error GoTo ErrHandler
    ' 如果字段为空,直接返回空
    If IsNull(IDCard) Or IDCard = "" Then
        GetAgeFromID = Null
        Exit Function
    End If
    Dim birthDate As Date
    Dim y As Integer, m As Integer, d As Integer
    Dim strID As String
    strID = CStr(IDCard)
    ' 检查身份证长度是否符合基本要求
    If Len(strID) < 14 Then
        GetAgeFromID = "格式错误"
        Exit Function
    End If
    ' 提取年、月、日
    y = Val(Mid(strID, 7, 4))
    m = Val(Mid(strID, 11, 2))
    d = Val(Mid(strID, 13, 2))
    ' 生成日期对象
    birthDate = DateSerial(y, m, d)
    ' 计算年龄:当前年份 - 出生年份,并判断生日是否已过
    GetAgeFromID = Year(Date) - Year(birthDate) + IIf(Format(Date, "mmdd") < Format(birthDate, "mmdd"), -1, 0)
    Exit Function
ErrHandler:
    GetAgeFromID = "错误"
End Function

第二步:在查询中使用

编写完代码后,你只需要在查询的设计视图中输入:

年龄: GetAgeFromID([身份证号])


注意事项

  • 数据类型:确保你的“身份证号”字段在表中是 文本(Short Text) 类型,而不是数字类型,如果是数字类型,长数字可能会导致精度丢失或科学计数法。
  • 数据清洗:如果身份证号中包含空格或特殊字符,建议先使用 Trim() 函数进行处理。
  • 性能提示:如果数据量达到数十万行,使用 VBA 函数 在查询中可能会比直接写长表达式稍慢,但在常规办公应用中差异可以忽略不计。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2026-07-14 09:44
下一篇 2026-07-14 10:15

相关推荐

  • ADO.NET操作数据库难吗?ADO.NET数据库操作详解

    ADO.NET是微软官方提供的数据访问技术,通过连接对象、命令对象和适配器对象,能够高效地在.NET应用程序与数据库之间建立稳定、双向的数据通道,是构建企业级后端服务的基石,在.NET生态系统中,数据访问层的选择直接决定了应用的响应速度和资源消耗,ADO.NET作为这一领域的老牌强者,虽然面对Entity Fr……

    2026-07-08
    003
  • 远程连接SQL数据库失败怎么办?详细排查步骤和解决方案来了!

    远程连接SQL数据库失败是开发和管理过程中常见的问题,可能由网络配置、权限设置、数据库服务状态等多种因素导致,本文将从排查步骤、常见原因及解决方案三个方面,帮助您快速定位并解决问题,检查网络连接与配置首先确认客户端与数据库服务器之间的网络是否畅通,可以使用ping命令测试服务器IP是否可达,或通过telnet工……

    2025-12-08
    0011
  • 怎么更改考勤数据库

    更改考勤数据库是一个需要谨慎操作的过程,涉及数据安全、系统稳定性和员工信息准确性,以下是详细的操作步骤和注意事项,帮助您顺利完成更改工作,更改前的准备工作在开始操作前,必须做好充分的准备工作,以避免数据丢失或系统故障,备份现有考勤数据库是至关重要的一步,使用数据库管理工具(如MySQL的mysqldump或SQ……

    2025-12-07
    004
  • 如何精准高效查询病毒数据库?新手必看步骤指南

    查询病毒数据库是生物医学研究、临床诊断和公共卫生监测中的重要环节,系统化的方法能确保信息获取的准确性和高效性,以下从数据库类型、查询步骤、工具使用及注意事项等方面进行详细说明,常见病毒数据库类型病毒数据库根据用途可分为序列数据库、临床数据库和文献数据库三大类,选择合适的数据库是查询的第一步,序列数据库这类数据库……

    2025-10-30
    0032

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信