在table表中有crad(身份证号码)字段,需要用身份证号码求出生日期,然后用出生日期得出年龄或直接用身份证号码直接求出年龄也可
原题:利用出生日期(改表中有出生日期字段,但是里面无数据,所以只有考虑从身份证号码入手)求出年龄大于等于60,小于等于18的客户的客户内码(cust_csno)
(日期按当前日期来计算,不是固定值,字段中身份证号码数据量差不多10万左右,需要求出所有的满足条件的数据)
select
(days(current date)- days(
concat(concat(concat(concat(substr(card,7,4),'-'),substr(card,11,2)),'-'),substr(card,13,2))
))/360 age from table1
备注:
//1.把table1 替换成自己的表名称
//2.concat(concat(concat(concat(substr(card,7,4),'-'),substr(card,11,2)),'-'),substr(card,13,2))取身份证年月日字符串,
//3.days()取指定日期的天数,两个天数相减,除以360得出年,我在db2上测试结果如图
//4.我用的是db2,如果你的是mysql,功能差不多,百度下相同功能函数,网上都有
身份证只能辨认大陆的
大陆的又分为16 和 18
所以判断逻辑:
号码长度如果等于18,则截取yyyyMMdd
号码长度如果等于16,则截取yyMMdd
号码长度如果等于其他,则无法识别(港澳台或者外国)
长度按照18为来计算