我的编程空间,编程开发者的网络收藏夹
学习永远不晚

数据库SQL函数 根据身份证号/出生年月 精确计算年龄(Oracle/MySQL)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

数据库SQL函数 根据身份证号/出生年月 精确计算年龄(Oracle/MySQL)

<问题> 根据身份证号统计年龄(18位)

Oracle

<思路>

(1)Substr()函数在Oracle使用中表示被劫取的字符串表达式,截取字符串的内容。

(2)To_date()函数可以转换不同格式的日期,通过使用to_date函数可以将字符串类型的日期转换成date格式。

(3)Months_between()函数反悔两个日期之间的月份数。

(4)Floor()函数,作用是向下取整数。

(5)TRUNC函数返回以指定元素格式截去一部分的日期值,或者直接对数字格式的数据进行截断.(此处亦可不加,加上则时间精确到秒)

利用以上函数的性质,首先根据substr函数获取到身份证号第7位开始的8个数,即出生年月日;后加一个to_date函数转换日期格式为yyyymmdd;后利用Months_between()函数用系统时间sysdate-todate即可获得月数时间差;再用月数时间差除以12个月得到岁数,因为除出来的结果存在小数点,则最后用floor函数向下取整(例如:目前3月份,但是生日是四月份的就不能给他满一年算)

<解>

SELECT "id" ,"idcard" , FLOOR((MONTHS_BETWEEN(TRUNC(SYSDATE),TO_DATE(SUBSTR("idcard",7,8),'yyyyMMdd'))/12)) AS age FROM table WHERE FLOOR((MONTHS_BETWEEN(SYSDATE,TO_DATE(SUBSTR("idcard",7,8),'yyyyMMdd'))/12));    

MySQL

<思路>

Str_to_date()函数用于将字符串转变为日期/时间值。

TIMESTAMPDIFF()函数用于计算两个日期的时间差

语法结构:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

MySQL利用这两个函数也能实现身份证号获取年龄,原理与Oracle一致。

<思路>

利用到TIMESTAMPDIFF()函数、Str_to_date()函数、curdate()函数(返回当前系统日期,不涉及时间部分)

<解>

select id,idcard,TIMESTAMPDIFF(year,str_to_date(substr(idcard,7,8),'%Y%m%d'),curdate()) as age from table ;   /*精确到日

(执行结果与Oracle结果一致)

<问题> 那怎么如果是出生年月怎么获取到年龄呢?

<思路>

思路与上述差别不大,即把substr(idcard,7,8)切换成(birth,'%Y-%m-%d')即可,并且加上curdate()函数,该函数返回当前系统日期,而不涉及时间部分。

<解>

select id ,birth, TIMESTAMPDIFF(year,str_to_date(birth,'%Y-%m-%d'),curdate()) as age from table;

(执行结果如下图)

tips:

(1)as用法可以跳转查看:https://mp.csdn.net/mp_blog/creation/editor/new/129301112

(2)Oracle区分大小写,在执行的时候注意字段需要加上双引号

来源地址:https://blog.csdn.net/qq_45876815/article/details/129319531

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

数据库SQL函数 根据身份证号/出生年月 精确计算年龄(Oracle/MySQL)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录