SQL語句通過身份證號計算年齡
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語句
select
id,
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)) as age,
idcard
from t_table;