<问题> 根据身份证号统计年龄(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)相关推荐

  1. 输入身份证号和年份计算年龄

    输入一个身份证号码(15位和18位)和一个年份,计算现在的年龄(忽略非法参数) eg:610618199001020065 2011 输出:21 代码: package 华为机试题; /*** @au ...

  2. mysql身份证号出生年月计算年龄(周岁)

    根据身份证号出生年月计算年龄(周岁) select TIMESTAMPDIFF(YEAR, SUBSTRING('xxxxxx19900828xxxx', 7, 8), CURDATE()) AS a ...

  3. Oracle中使用SQL根据出生日期精确计算年龄

    Oracle中使用SQL根据出生日期精确计算年龄 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例): select XM,CSNY as 出生日期,-- extract函数用于提取日期 ...

  4. js脚本根据身份证号获取性别、年龄、家庭地址、生日

    做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个 当身份证号的焦点失去选中后,根据身份证号获取性别.年龄.家庭地址.生日 直接上代码: index.html & ...

  5. mysql根据身份证号查 性别、年龄以及出生日期

    mysql根据身份证号查性别.年龄以及出生日期 博客里面还有对应的java工具类:芜湖,起飞 这个身份证号也就只针对大陆身份证号 SELECT p.id,-- 这是根据身份证号求年龄 (YEAR(NO ...

  6. 用java根据身份证号提取性别和年龄

    在 Java 中,可以使用以下步骤来提取身份证号中的性别和年龄信息: 使用正则表达式验证身份证号的格式是否正确. 如果身份证号的格式正确,则可以使用截取字符串的方法来提取出生日期信息.身份证号中的出生 ...

  7. java代码实现根据身份证号获取性别,年龄

    根据身份证号获取性别,年龄 // 根据身份编号获取性别public static String getGenderByIdCard(String idCard) {String sGender = & ...

  8. java计算年龄_java根据出生年月日精确计算年龄的算法

    今天项目中有个根据出生年月日,需要精确计算年龄的算法,找了半天才算有个正确的,分享出来给牛牛们成为自己java代码库的一部分算法.public static int getAge(Date dateO ...

  9. sql server 根据身份证号计算出生日期和年龄的存储过程

    我这边有一个业务,需要客户填写身份证号,自动计算他的出生日期和年龄 在sql中,具体的存储过程实现是这样的: /******************************************** ...

最新文章

  1. SAP MM 移动平均价的商品发票价格和采购订单价格差异的处理
  2. 日志切割之Logrotate
  3. Linux用户、群组管理
  4. 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
  5. Caffe学习系列(19): 绘制loss和accuracy曲线
  6. python定义test方法_向python/django失败的测试方法的详细信息中添加自定义/调试消息的任何方法unittest.TestCase?...
  7. c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值
  8. HDU2021 发工资咯:)【入门】
  9. docx文件怎样打开 - 转
  10. linux curl获取头部信息,curl 命令如何获取 http header 返回的响应消息头
  11. windows下怎么打开psql命令
  12. TCP协议的三次握手+四次断开
  13. 人民银行计算机机房,中国人民银行行计算机中心机房管理详细规定.doc
  14. QPSK调制与解调(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)
  15. 简要分析上海链家9月二手房
  16. 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000字节,若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送2个最大段后,成功收到主机乙发送的第一段的确认段,确认段中通告的接收
  17. UI设计行业领域知识体系
  18. CVE-2020-5135:SonicOS缓冲区溢出漏洞通告
  19. iOS - navigationController简单使用
  20. Keras 在windows环境下安装配置教程

热门文章

  1. Python实现KNN算法(鸢尾花集)
  2. 在小皮面板中使用cmd进入mysql命令,包含mysql错误unknown variable ‘secure_file_priv‘解决方法(超详细)
  3. office转pdf 文件路径 php,php如何将office文件转pdf文件
  4. 学python还是学产品经理_转型AI产品经理,原来不需要学那么深的算法和数学模型...
  5. oracle的默认端口号是多少,口号标语之oracle默认端口号
  6. 夜神模拟器和android studio ip的问题
  7. 你想玩物联网吗?物联网编程真的很难吗?原来很简单。
  8. 高被引论文有什么特征?
  9. js实现返回按钮3种方式
  10. notepad++下载 地址真实有效