mysql計算年齡

2021-09-10 19:07:02 字數 1164 閱讀 4429

方法一,作者也說出了缺陷,就是當日期為未來日期時結果為0,而不是負數;這裡使用了5個函式和兩個運算子。

方法二select date_format(now(), 『%y』) - date_format(birthday, 『%y』) - (date_format(now(), 『00-%m-%d』) < date_format(birthday, 『00-%m-%d』)) as age

方法二,解決了方法一為負數的問題,但看起來更複雜;這裡使用了6個函式和3個運算子。

看了這篇貼子後,我就暈了,怎麼會這麼複雜,以前用sql server很簡單就可以了。我堅信一定有簡單高效的方法。很快就找到了根據以上方法改良後的方法。

改良後方法一和方法二

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』,會導致出錯。

然後自己根據mysql的幫助文件中的日期函式想到了第三種方法:

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

取生日和當前日期之前的天數除以一年的實際天數(365天5小時48分46秒),然後取整。這樣只用了三個函式和乙個運算子就搞定了。

然後,很快在國外**找到了第四種方法:

方法四select timestampdiff(year, @birthday, curdate())

這種方法只用了兩個函式就搞定了,應該是最佳方法了。

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

方法五select round(datediff(curdate(), @birthday)/365.2422)

這樣計算出的年齡離實際的周歲最接近了,但可能方法四是最符合年齡定義的了。

mysql出生日期計算年齡並查詢年齡

剛開始用mysql,需要用出生日期計算年齡,而且需要查詢符合這個年齡的使用者資訊。網路上介紹了不少顯示年齡的方法,但是要使用where語句查詢時,就失效了。在網路上找到了一位大神的回答,親測有用。題目 查詢年齡為33的使用者資訊 select customers.cusname,customers....

Jquery計算年齡

function countage birthday var curdate new date var oridate new date timestr var curyear parseint curdate.getfullyear 返回4位完整的年份 var oriyear parseint o...

sql 計算年齡

1.建立乙個計算年齡的函式 具體計算邏輯是,先年份相減,然後比較月份跟日期,如果當前月份日期小於出生的月份日期,則年齡 1 create function dbo fun getage agedate date,curdate date returns int begin return datedi...