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())
計算日期之間相差的年數,即為年齡。
Mysql 根據出生日期計算年齡