欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql查詢連續(xù)日期,sql中如何用兩種方法根據(jù)出生日期查詢年齡

mysql查詢連續(xù)日期,sql中如何用兩種方法根據(jù)出生日期查詢年齡?

MySQL根據(jù)出生日期計(jì)算年齡的五種方法比較

方法一

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age

方法一,作者也說出了缺陷,就是當(dāng)日期為未來日期時(shí)結(jié)果為0,而不是負(fù)數(shù);這里使用了5個(gè)函數(shù)和兩個(gè)運(yùn)算符。

方法二

SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age

方法二,解決了方法一為負(fù)數(shù)的問題,但看起來更復(fù)雜;這里使用了6個(gè)函數(shù)和3個(gè)運(yùn)算符。

改良后方法一和方法二

SELECT year( from_days( datediff( now( ), birthdate)));

SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));

改良后的方法一,少了一個(gè)函數(shù)和一個(gè)運(yùn)算符,當(dāng)日期為未來日期時(shí)計(jì)算結(jié)果還是為0;

改良后的方法二,還是6個(gè)函數(shù)和3個(gè)運(yùn)算符,看起來簡(jiǎn)單些;取日期的右邊五位,當(dāng)日期格式為‘2013-01-01’時(shí)取到的是‘01-01’,沒有問題;當(dāng)日期格式為‘2013-1-1’縮寫格式時(shí),取右邊的五位取出的是‘3-1-1’,會(huì)導(dǎo)致出錯(cuò)。

然后自己根據(jù)MYSQL的幫助文檔中的日期函數(shù)想到了第三種方法:

方法三

SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)

取生日和當(dāng)前日期之前的天數(shù)除以一年的實(shí)際天數(shù)(365天5小時(shí)48分46秒),然后取整。這樣只用了三個(gè)函數(shù)和一個(gè)運(yùn)算符就搞定了。

然后,很快在國(guó)外網(wǎng)站找到了第四種方法:

方法四

SELECT TIMESTAMPDIFF(YEAR, @birthday, CURDATE())

這種方法只用了兩個(gè)函數(shù)就搞定了,應(yīng)該是最佳方法了。

測(cè)試了一下以上四種方法,假如當(dāng)前日期為'2017-1-13',當(dāng)生日為‘2013-1-14’時(shí),還差一天就要過生日了,離4歲只 差一天了,結(jié)果還是3歲,感覺不是很合理;把方法三改造一下,四舍五入得到方法五:

方法五

SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)