吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4305|回复: 10
收起左侧

[其他转载] SQL语句通过身份证号计算年龄

 关闭 [复制链接]
ihnb 发表于 2021-4-16 09:15

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;

我的博客
尊重原创,转载请注明出处!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qianshang666 发表于 2021-4-16 09:38
这个博客挺不错的
steel_man 发表于 2021-4-16 09:57
学习了  但是感觉用处不大   为了保证数据库的性能  计算都在服务层面完成  数据库只执行存取操作
ky_wei 发表于 2021-4-16 10:17
steel_man 发表于 2021-4-16 09:57
学习了  但是感觉用处不大   为了保证数据库的性能  计算都在服务层面完成  数据库只执行存取操作

确实,如果大量执行可能会崩掉吧
头像被屏蔽
tlf 发表于 2021-4-16 10:18
提示: 作者被禁止或删除 内容自动屏蔽
bowie1127 发表于 2021-4-16 10:31
办公人员觉得EXCEL更快,但是网页录入或者软件处理的话肯定是SQL方便。。
 楼主| ihnb 发表于 2021-4-19 08:32
bowie1127 发表于 2021-4-16 10:31
办公人员觉得EXCEL更快,但是网页录入或者软件处理的话肯定是SQL方便。。

正因为不会excel才整sql
lww32 发表于 2023-3-20 19:52
不错,表扬
philsau 发表于 2023-3-20 21:47
不错不错,学到了
TenSir152 发表于 2023-3-21 07:09
这个有意思,SQL计算
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表