十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
以前使用mysql不是很多,對mysql的函數(shù)也不是很熟悉,遇到這個問題第一時間百度搜索,搜索到這兩種方法,這兩種方法是排在百度第一條的博客。
陽信網(wǎng)站建設公司成都創(chuàng)新互聯(lián),陽信網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為陽信上1000家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的陽信做網(wǎng)站的公司定做!
方法一,作者也說出了缺陷,就是當日期為未來日期時結(jié)果為0,而不是負數(shù);這里使用了5個函數(shù)和兩個運算符。
方法二,解決了方法一為負數(shù)的問題,但看起來更復雜;這里使用了6個函數(shù)和3個運算符。
看了這篇貼子后,我就暈了,怎么會這么復雜,以前用Sql Server很簡單就可以了。我堅信一定有簡單高效的方法。很快就找到了根據(jù)以上方法改良后的方法。
改良后的方法一,少了一個函數(shù)和一個運算符,當日期為未來日期時計算結(jié)果還是為0;
改良后的方法二,還是6個函數(shù)和3個運算符,看起來簡單些;取日期的右邊五位,當日期格式為‘2013-01-01’時取到的是‘01-01’,沒有問題;當日期格式為‘2013-1-1’縮寫格式時,取右邊的五位取出的是‘3-1-1’,會導致出錯。
然后自己根據(jù)MYSQL的幫助文檔中的日期函數(shù)想到了第三種方法:
取生日和當前日期之前的天數(shù)除以一年的實際天數(shù)(365天5小時48分46秒),然后取整。這樣只用了三個函數(shù)和一個運算符就搞定了。
然后,很快在國外網(wǎng)站找到了第四種方法:
這種方法只用了兩個函數(shù)就搞定了,應該是最佳方法了。
測試了一下以上四種方法,假如當前日期為'2017-1-13',當生日為‘2013-1-14’時,還差一天就要過生日了,離4歲只 差一天了,結(jié)果還是3歲,感覺不是很合理;把方法三改造一下,四舍五入得到方法五:
這樣計算出的年齡離實際的周歲最接近了,但可能方法四是最符合年齡定義的了。
報錯是因為 沒有這個方法
可能的原因是 1 方法是自定義的 你當前數(shù)據(jù)庫中沒有寫入這個方法
2 這個方法是官方的但是 版本號不同 這個方法被取消了
解決的方法 1 寫入這個方法調(diào)用 2 更換 對應版本的 mysql
在Mysql中計算年齡:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age FROM 表名;
SQL計算年齡:
SELECT FLOOR(DATEDIFF(CURDATE(), STR_TO_DATE(birthday, '%Y-%m-%d'))/365) AS age FROM table_name;
拓展:MySQL中可以使用TIMESTAMPDIFF函數(shù)根據(jù)出生日期計算年齡,它接受5個參數(shù):
TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2, [datetime_expr3], [datetime_expr4])
unit參數(shù)可以是YEAR,QUARTER,MONTH,WEEK,DAY,HOUR,MINUTE,SECOND中的任何一個,代表了計算結(jié)果的單位。