【达梦】通过身份证号查询年龄
现在的身份证应该没有不是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岁。