数据库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区分大小写,在执行的时候注意字段需要加上双引号
数据库SQL函数 根据身份证号/出生年月 精确计算年龄(Oracle/MySQL)相关推荐
- 输入身份证号和年份计算年龄
输入一个身份证号码(15位和18位)和一个年份,计算现在的年龄(忽略非法参数) eg:610618199001020065 2011 输出:21 代码: package 华为机试题; /*** @au ...
- mysql身份证号出生年月计算年龄(周岁)
根据身份证号出生年月计算年龄(周岁) select TIMESTAMPDIFF(YEAR, SUBSTRING('xxxxxx19900828xxxx', 7, 8), CURDATE()) AS a ...
- Oracle中使用SQL根据出生日期精确计算年龄
Oracle中使用SQL根据出生日期精确计算年龄 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例): select XM,CSNY as 出生日期,-- extract函数用于提取日期 ...
- js脚本根据身份证号获取性别、年龄、家庭地址、生日
做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个 当身份证号的焦点失去选中后,根据身份证号获取性别.年龄.家庭地址.生日 直接上代码: index.html & ...
- mysql根据身份证号查 性别、年龄以及出生日期
mysql根据身份证号查性别.年龄以及出生日期 博客里面还有对应的java工具类:芜湖,起飞 这个身份证号也就只针对大陆身份证号 SELECT p.id,-- 这是根据身份证号求年龄 (YEAR(NO ...
- 用java根据身份证号提取性别和年龄
在 Java 中,可以使用以下步骤来提取身份证号中的性别和年龄信息: 使用正则表达式验证身份证号的格式是否正确. 如果身份证号的格式正确,则可以使用截取字符串的方法来提取出生日期信息.身份证号中的出生 ...
- java代码实现根据身份证号获取性别,年龄
根据身份证号获取性别,年龄 // 根据身份编号获取性别public static String getGenderByIdCard(String idCard) {String sGender = & ...
- java计算年龄_java根据出生年月日精确计算年龄的算法
今天项目中有个根据出生年月日,需要精确计算年龄的算法,找了半天才算有个正确的,分享出来给牛牛们成为自己java代码库的一部分算法.public static int getAge(Date dateO ...
- sql server 根据身份证号计算出生日期和年龄的存储过程
我这边有一个业务,需要客户填写身份证号,自动计算他的出生日期和年龄 在sql中,具体的存储过程实现是这样的: /******************************************** ...
最新文章
- SAP MM 移动平均价的商品发票价格和采购订单价格差异的处理
- 日志切割之Logrotate
- Linux用户、群组管理
- 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
- Caffe学习系列(19): 绘制loss和accuracy曲线
- python定义test方法_向python/django失败的测试方法的详细信息中添加自定义/调试消息的任何方法unittest.TestCase?...
- c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值
- HDU2021 发工资咯:)【入门】
- docx文件怎样打开 - 转
- linux curl获取头部信息,curl 命令如何获取 http header 返回的响应消息头
- windows下怎么打开psql命令
- TCP协议的三次握手+四次断开
- 人民银行计算机机房,中国人民银行行计算机中心机房管理详细规定.doc
- QPSK调制与解调(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)
- 简要分析上海链家9月二手房
- 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000字节,若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送2个最大段后,成功收到主机乙发送的第一段的确认段,确认段中通告的接收
- UI设计行业领域知识体系
- CVE-2020-5135:SonicOS缓冲区溢出漏洞通告
- iOS - navigationController简单使用
- Keras 在windows环境下安装配置教程
热门文章
- Python实现KNN算法(鸢尾花集)
- 在小皮面板中使用cmd进入mysql命令,包含mysql错误unknown variable ‘secure_file_priv‘解决方法(超详细)
- office转pdf 文件路径 php,php如何将office文件转pdf文件
- 学python还是学产品经理_转型AI产品经理,原来不需要学那么深的算法和数学模型...
- oracle的默认端口号是多少,口号标语之oracle默认端口号
- 夜神模拟器和android studio ip的问题
- 你想玩物联网吗?物联网编程真的很难吗?原来很简单。
- 高被引论文有什么特征?
- js实现返回按钮3种方式
- notepad++下载 地址真实有效