【达梦】通过身份证号查询年龄

现在的身份证应该没有不是18位的吧。。。。

select substring(identity_no ,7,8), (substring(now(),1,4)-substring(identity_no ,7,4)) - ( case when date_format(now(),'%m%d') - substring(identity_no,11,4) > 0 then 0 else 1 end ) as age from member limit 5;

解释一下:
substring(now(),1,4)-substring(identity_no ,7,4)):根据年份获取一个年份差,
case when date_format(now(),'%m%d') - substring(identity_no,11,4) > 0 then 0 else 1 end : 通过当前月日和 身份证的月日相减,如果大于0,说明这个人在今年已经过了生日,所以不用减掉1岁。反之当前日期小于身份证上的日期,表明还没有过生日,年龄就需要减掉1岁。

posted @ 2023-02-27 17:26  aaacarrot  阅读(514)  评论(0编辑  收藏  举报