zoukankan      html  css  js  c++  java
  • Mysql 根据出生日期计算年龄

    最近因为业务要求需要根据出生日期计算年龄,在网上查了好多的方法,在这里总结一下。

    网上的计算方法好多都提到了格里高利历法,特意去查了下资料,普及点知识。

      格里高利历是公历的标准名称,是一种源自于西方社会的历法。它先由意大利医生、天文学家、哲学家、年代学家阿洛伊修斯·里利乌斯(Aloysius Lilius,约1519-1576)

    与克拉乌(Christophorus Clavius)等学者在儒略历的基础上加以改革,后由教皇格里高利十三世于1582年颁布。而公元即“公历纪元”,又称“西元”。就是我们俗成的阳历。

      它的回归年是 365天5小时48分45.5秒,一年的天数大约为 365.2422 天,下面计算年龄时会用到这个数字。

      1582年3月1日,格里高利颁发了改历命令:内容是:

      一、1582年10月4日后的一天是10月15日,而不是10月5日,但星期序号仍然连续计算:10月4日是星期四,第二天10月15日是星期五。这样,就把从公元325年以来积累的老账一笔勾销了。

      二、为避免以后再发生春分飘离的现象,改闰年方法为: 凡公元年数能被4整除的是闰年,但当公元年数后边是带两个“0”的“世纪年”时,必须能被400整除的年才是闰年。

    MySQL计算年龄有好多种方式,依次总结下,可以根据自己的业务需要和喜好选择使用。

    方法一:

    SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age

    使用TO_DAYS()和FROM_DAYS()两个函数完成日期和天数之间的转换,最后取日期中的年分,语句末尾的 +0 是为了去掉日期格式转换之后 前面的 0 。

    改进:

    SELECT YEAR(FROM_DAYS(DATEDIFF(NOW(),birthday)) )FROM employee_out;

    方法二:

    SELECT YEAR(CURDATE())-YEAR('2019-02-02')-(RIGHT(CURDATE(),5)<RIGHT('2019-02-02',5));

    这样处理是为了计算当前年小于需要计算的年份的情况,当当前年小于需要计算的年份时,查询的结果为负数。

    方法三:

    SELECT FLOOR(DATEDIFF(CURDATE(), '1993-01-23')/365.2422) 

    算出天数除以公历一年的天数,下取整,计算出实际年龄。

    方法四:(推荐)

    SELECT TIMESTAMPDIFF(YEAR,'1993-01-02',CURDATE())

    计算日期之间相差的年数,即为年龄。

     

  • 相关阅读:
    基于Token的身份验证--JWT
    在eclipse中使用maven创建springMVC项目
    Mybatis框架插件PageHelper的使用
    java 中==符号的坑
    Gradle project sync failed.
    intellij idea android错误: Missing styles. Is the correct theme chosen for this layout?
    thinkpad win8.1 无线连接受限
    struts2
    在Strust2 使用datatimepicker 标签引发的一系列问题
    struts2中css,js等资源无效 非路径问题(新手问题)
  • 原文地址:https://www.cnblogs.com/leilong/p/8365460.html
Copyright © 2011-2022 走看看