使用SQL语法根据身份证号计算年龄
要通过身份证号计算年龄,可以使用以下SQL语法: 1. 首先,提取身份证号中的出生年份; 2. 然后,获取当前年份; 3. 最后,用当前年份减去出生年份得到年龄。 以下是具体的SQL代码: ```sql SELECT FLOOR(DATEDIFF(CURDATE(), STR_TO_DATE(SUBSTRING(身份证号, 7, 8), '%Y%m%d')) / 365) AS 年龄 FROM 表名; ``` 这段代码首先使用`SUBSTRING`函数提取身份证号中的出生日期(假设格式为'YYYYMMDD'),然后使用`STR_TO_DATE`函数将其转换为日期格式。接着,使用`DATEDIFF`函数计算当前日期与出生日期之间的天数差,再除以365得到年龄。最后,使用`FLOOR`函数将
1.截取身份证号上的出生日期
身份证一般为18位数和15位数
18位数身份证的第7-10位数是出生年份,第11-14位数是出生月日,所以18位身份证的年龄计算如下
substring(now(),1,4)-substring(idcard,7,4))-(substring(idcard,11,4)-date_format(now(),'%m%d')>0
15位数身份证的第7-8位数是出生年份,但是少了两位。15位数身份证把1930就简化成30少了前面的19,并且15位身份证全部都在19XX年颁发。 第9-12位数是出生月日,所以15位身份证的年龄计算如下
substring(now(),1,4)-(1900+substring(idcard,7,2)))-(substring(idcard,9,4)-date_format(now(),'%m%d')>0
2.加if判断18位和15位
MySQL的if语法比较像JAVA里的三元表达式
IF(条件,条件为true执行,条件为false执行)
MySQL的字符串长度获取方法
CHAR_LENGTH(字符串)
3.最终的sql语句
selectid,if(CHAR_LENGTH(idcard)<18,(substring(now(),1,4)-(1900+substring(idcard,7,2)))-(substring(idcard,9,4)-date_format(now(),'%m%d')>0),(substring(now(),1,4)-substring(idcard,7,4))-(substring(idcard,11,4)-date_format(now(),'%m%d')>0))asage,idcardfromt_table;