方法一
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age
缺陷,當日期為未來日期時結(jié)果為0,而不是負數(shù);
這里用了5個函數(shù)和兩個運算符。
方法二
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age
解決了方法一為負數(shù)的問題,但看起來更復雜;這里使用了6個函數(shù)和3個運算符。
改良后方法一和方法二
SELECT year( from_days( datediff( now( ), birthdate)));
SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));
改良后的方法一,少了一個函數(shù)和一個運算符,當日期為未來日期時計算結(jié)果還是為0;
改良后的方法二,還是6個函數(shù)和3個運算符,看起來簡單些;取日期的右邊五位,當日期格式為‘2013-01-01’時取到的是‘01-01’,沒有問題;當日期格式為‘2013-1-1’縮寫格式時,取右邊的五位取出的是‘3-1-1’,會導致出錯。
方法三
SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)
取生日和當前日期之前的天數(shù)除以一年的實際天數(shù)(365天5小時48分46秒),然后取整。這樣只用了三個函數(shù)和一個運算符。
方法四
SELECT TIMESTAMPDIFF(YEAR, @birthday, CURDATE())
這種方法只用了兩個函數(shù)就搞定,應(yīng)該是最佳方法。
測試了一下以上第四種方法,假如當前日期為'2017-1-13',當生日為‘2013-1-14’時,還差一天就要過生日了,離4歲只 差一天了,結(jié)果還是3歲,感覺不是很合理;把方法三改造一下,四舍五入得到方法五:文章來源:http://www.zghlxwxcb.cn/news/detail-667407.html
方法五
SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)
這樣計算出的年齡離實際的周歲最接近,但可能方法四最符合年齡定義。文章來源地址http://www.zghlxwxcb.cn/news/detail-667407.html
到了這里,關(guān)于MySQL根據(jù)出生日期計算年齡的五種方法比較的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!