access用身份证号码计算年龄 20
我不是IT专业的,我就是个有点基础的二把刀。我有个员工信息表,里面有录入身份证号码,然后我想在[员工信息表]增加年龄字段,所以我想请教大神,用“查询更新”还是在“[员工信...
我不是IT专业的,我就是个有点基础的二把刀。我有个员工信息表,里面有录入身份证号码,然后我想在[员工信息表]增加年龄字段,所以我想请教大神,用“查询更新”还是在“[员工信息表].[年龄]”用计算的方法,求优劣和具体办法。
因为我不会VBA,所以求具体代码,请详细叙述! 展开
因为我不会VBA,所以求具体代码,请详细叙述! 展开
3个回答
展开全部
如果都是18位身份证号码,这样写:
SELECT *,
datediff("yyyy",cdate(mid(身份证号码,7,4) & "-" & mid(身份证号码,11,2) & "-" & mid(身份证号码,13,2)),date()) as 年龄
from 员工信息表;
18位和15位混用,则还要复杂些:
SELECT *,
iif(len(身份证号码)=18,datediff("yyyy",cdate(mid(身份证号码,7,4) & "-" & mid(身份证号码,11,2) & "-" & mid(身份证号码,13,2)),date()),
datediff("yyyy",cdate(mid(身份证号码,7,2) & "-" & mid(身份证号码,9,2) & "-" & mid(身份证号码,11,2)),date()))
AS 年龄 FROM 员工信息表;
注意:身份证号码必须正确才能查出准确年龄
SELECT *,
datediff("yyyy",cdate(mid(身份证号码,7,4) & "-" & mid(身份证号码,11,2) & "-" & mid(身份证号码,13,2)),date()) as 年龄
from 员工信息表;
18位和15位混用,则还要复杂些:
SELECT *,
iif(len(身份证号码)=18,datediff("yyyy",cdate(mid(身份证号码,7,4) & "-" & mid(身份证号码,11,2) & "-" & mid(身份证号码,13,2)),date()),
datediff("yyyy",cdate(mid(身份证号码,7,2) & "-" & mid(身份证号码,9,2) & "-" & mid(身份证号码,11,2)),date()))
AS 年龄 FROM 员工信息表;
注意:身份证号码必须正确才能查出准确年龄
追问
身份证号码肯定是18位的,所以就可以不用if、len语句判断位数了,我觉着是不是用: 类似year(now())-mid(身份证号码,7,4)这样的语句编写啊,能简化些吗?求语句的解释
追答
因为要考虑闰年闰月问题,用datediff 函数求年龄可以精确到一天不差,单用year计算达不到这个精度。例如年底出生的或当年出生的单按年份计算年龄误差就会比较大,所以不建议这样简化。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询