1. 程式人生 > >Mysql 根據出生日期計算年齡

Mysql 根據出生日期計算年齡

format birt div 轉換 to_days ref 社會 emp ear

最近因為業務要求需要根據出生日期計算年齡,在網上查了好多的方法,在這裏總結一下。

網上的計算方法好多都提到了格裏高利歷法,特意去查了下資料,普及點知識。

  格裏高利歷是公歷的標準名稱,是一種源自於西方社會的歷法。它先由意大利醫生、天文學家、哲學家、年代學家阿洛伊修斯·裏利烏斯(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 根據出生日期計算年齡