localdate计算相差天数_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了
轉譯自 How To Calculate Age From Date Of Birth In MySQL- Querychat。
中文轉載,請注明出處。
使用SQL語句計算年齡,在事務處理和日期計算中,較為常見。MySQL提供了許多日期函數,可以自由發揮。本文中看我們嘗試
SQL 年齡計算 —— 組件
MySQL沒有開箱即用的工具,用于計算年齡。所以,這也阻擋不了我們求知的熱情。工具不夠,自己來湊。沒有直接的函數,我們就用給的函數,組裝出來一個。
說白了,年齡就是啷個日期差。當前日期,減去生日。那就是年齡。
MySQL已經提供的函數,下面介紹一下:
- CURDATE() – 返回當前日期
- TIMESTAMPDIFF() – 計算時間差,差值單位自定義
這倆函數就夠了,日期差,獲取年差值,月差值,或者其他。
CURDATE() 返回MySQL服務器運行時間。無需傳參,調用如下:
CURDATE()
TIMESTAMPDIFF() 調用格式如下:
TIMESTAMPDIFF(unit, begin_date, end_date)單位unit決定了返回數值。unit的可選項如下:
- YEAR
- QUARTER
- MONTH
- WEEK
- DAY
- HOUR
- MINUTE
- SECOND
- MICROSECOND
那,我們試著組合起來,寫個公式:
SELECT TIMESTAMPDIFF(YEAR, '2018-01-20', '2019-01-21');上述SQL語句運行后返回 1.
修改一下參數:
SELECT TIMESTAMPDIFF(DAY, '2018-01-20', '2019-01-21');返回的是 366
SQL 計算年齡 —— 組合起來
學習了兩個函數的使用方法,下面計算兩個日期相差的年份:
TIMESTAMPDIFF(YEAR, dob, CURDATE())上式dob字段,在傳遞給TIMESTAMPDIFF函數之前,需要轉化解析為日期格式字符串,才能正常使用。
當前日期是2019年12月20日, 假定生日是1978年8月3日,計算如下:
SELECT TIMESTAMPDIFF(YEAR, '1978-08-03', CURDATE());計算結果 41.
MySQL 計算年齡 —— 提高精度
上面的式子,計算出了正確的年齡。但是如果日期格式不完整,缺少月份,或者日期,都不能計算出來結果。
對應同一個月份,或者同一年的日期,計算差值,年總是=0。因此我們提高精度:
TIMESTAMPDIFF(MONTH, dob_field, CURDATE())計算兩個日期差的月數。
以此類推:
TIMESTAMPDIFF(DAY, dob_field, CURDATE())
計算兩個日期差的天數。
舉一反三,我們可以相應的計算日期差的月份,和天數。 例如
TIMESTAMPDIFF( MONTH, dob_ field, CURDATE() ) % 12 計算月部分:
TIMESTAMPDIFF( DAY, dob_ field, CURDATE() ) % 30.4375 計算天部分:
組合在一起,就是完整的年齡表達式:
SELECT CONCAT(TIMESTAMPDIFF( YEAR, dob_ field, CURDATE() ),' Years,', TIMESTAMPDIFF( MONTH, dob_ field, CURDATE()) % 12,' Months,',FLOOR( TIMESTAMPDIFF( DAY, dob_ field, CURDATE() ) % 30.4375 ),' Days')
其中dob_ field是包含生日的字段,或變量.
舉例說明
創建一張表,字段包含姓名,還有生日:
DROP TABLE IF EXISTS T1;CREATE TABLE T1( student_name VARCHAR(100), dob date, age_year INT, age_month INT, age_days INT, age_formatted VARCHAR(200));創建數據庫 test_age,然后創建表 t1。
寫入一些隨機數據:
INSERT INTO t1(student_name, dob) values ('Jennifer Brit', '1990-02-20');INSERT INTO t1(student_name, dob) values ('David Dunkrick', '1988-12-20');INSERT INTO t1(student_name, dob) values ('Michelle Morris', '2001-08-03');INSERT INTO t1(student_name, dob) values ('Ubaid Ali', '1987-10-19');INSERT INTO t1(student_name, dob) values ('Juliet Cross', '2019-01-25');下面我們根據生日dob字段,分別計算并更新 age_year, age_month, age_days 和age_formatted。運行以下SQL語句:
UPDATE T1SET AGE_FORMATTED = CONCAT( TIMESTAMPDIFF( YEAR, DOB, CURDATE() ), ' YEARS,', TIMESTAMPDIFF( MONTH, DOB, CURDATE()) % 12, ' MONTHS,', FLOOR( TIMESTAMPDIFF( DAY, DOB, CURDATE() ) % 30.4375 ), ' DAYS' ), AGE_YEAR = TIMESTAMPDIFF( YEAR, DOB, CURDATE() ), AGE_MONTH = TIMESTAMPDIFF( MONTH, DOB, CURDATE()) % 12, AGE_DAYS = FLOOR( TIMESTAMPDIFF( DAY, DOB, CURDATE()) % 30.4375);更新完畢之后,查看結果
SELECT * FROM T1;OK,一切結束,拿上SQL語句去數據庫上測試一下吧。
總結
以上是生活随笔為你收集整理的localdate计算相差天数_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软 python教程_最强福利——来自
- 下一篇: mp3格式音频文件结构解析图_mp3文件