Mysql中通過生日計算年齡

2021-10-07 18:29:34 字數 2750 閱讀 1057

方法一當前時間天數-生日天數–轉換年份

當前時間為 2020-07-04

此方法缺陷,就是當日期為未來日期時結果為0,而不是負數

方法二

當前時間為 2020-07- 04

set @dt1 = str_to_date(『2021-09-29』,』%y-%m-%d』); – 2021-09-29

select date_format(now(), 『%y』) - date_format(@dt1, 『%y』) - (date_format(now(), 『00-%m-%d』) select year( from_days( datediff( now( ), birthdate)));

select year(curdate())-year(birthday)-(right(curdate(),5)改良後的方法一,少了乙個函式和乙個運算子,當日期為未來日期時計算結果還是為0;

改良後的方法二,還是6個函式和3個運算子,看起來簡單些;取日期的右邊五位,當日期格式為『2013-01-01』時取到的是『01-01』,沒有問題;當日期格式為『2013-1-1』縮寫格式時,取右邊的五位取出的是『3-1-1』,會導致出錯。

範例:set @dt = str_to_date(『1991-09-29』,』%y-%m-%d』); – 1991-09-29

改良後的方法一,當日期為未來日期時計算結果還是為0;

方法三select floor(datediff(curdate(), @birthday)/365.2422)

取生日和當前日期之前的天數除以一年的實際天數(365天5小時48分46秒),然後取整。

範例:set @dt1 = str_to_date(『1991-09-29 00:00:00』,』%y-%m-%d』);

方法四

select timestampdiff(year, @birthday, curdate())

測試了一下以上四種方法,假如當前日期為』2017-1-13』,當生日為『2013-1-14』時,還差一天就要過生日了,離4歲只 差一天了,結果還是3歲,感覺不是很合理;把方法三改造一下,四捨五入得到方法五:

範例:set @dt1 = str_to_date(『1991-09-29 00:00:00』,』%y-%m-%d』);

方法五

select round(datediff(curdate(), @birthday)/365.2422)

範例:set @dt1 = str_to_date(『1991-09-29 00:00:00』,』%y-%m-%d』);

綜上,年齡計算一般採用方法四或者方法五

mysql 最近過生日

需求 檢視最近20天過生日的客戶 思路 分兩種情況,第一種 客戶月日在現在月日之後,計算今年生日到現在的天數。第二種 客戶月日在現在月日之前,計算明年生日到現在的天數。select from t investor where birthday is not null and case when da...

根據生日計算年齡

根據生日計算年齡可以通過calendar實現。最簡單可以考慮get calendar.day of year 來簡單修正年齡,但是遇到生日在閏年的2月29之後,或者今年是閏年的2月29之後可能出現計算不准,誤差一天。所以還是老實判斷年月日好了。public static intgetage date...

通過出生日期計算年齡

關於通過出生日期計算年齡的問題,通過baidu搜尋得到很多 貼了以下函式 function calcage datempdateofbirth as variant as integer calcage int datediff y datempdateofbirth,date 365.25 end...