日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

localdate计算相差天数_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了

發(fā)布時間:2023/12/15 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 localdate计算相差天数_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)譯自 How To Calculate Age From Date Of Birth In MySQL- Querychat。

中文轉(zhuǎn)載,請注明出處。

使用SQL語句計算年齡,在事務(wù)處理和日期計算中,較為常見。MySQL提供了許多日期函數(shù),可以自由發(fā)揮。本文中看我們嘗試

SQL 年齡計算 —— 組件

MySQL沒有開箱即用的工具,用于計算年齡。所以,這也阻擋不了我們求知的熱情。工具不夠,自己來湊。沒有直接的函數(shù),我們就用給的函數(shù),組裝出來一個。

說白了,年齡就是啷個日期差。當前日期,減去生日。那就是年齡。

MySQL已經(jīng)提供的函數(shù),下面介紹一下:

  • CURDATE() – 返回當前日期
  • TIMESTAMPDIFF() – 計算時間差,差值單位自定義

這倆函數(shù)就夠了,日期差,獲取年差值,月差值,或者其他。

CURDATE() 返回MySQL服務(wù)器運行時間。無需傳參,調(diào)用如下:

CURDATE()

TIMESTAMPDIFF() 調(diào)用格式如下:

TIMESTAMPDIFF(unit, begin_date, end_date)

單位unit決定了返回數(shù)值。unit的可選項如下:

  • YEAR
  • QUARTER
  • MONTH
  • WEEK
  • DAY
  • HOUR
  • MINUTE
  • SECOND
  • MICROSECOND

那,我們試著組合起來,寫個公式:

SELECT TIMESTAMPDIFF(YEAR, '2018-01-20', '2019-01-21');

上述SQL語句運行后返回 1.

修改一下參數(shù):

SELECT TIMESTAMPDIFF(DAY, '2018-01-20', '2019-01-21');

返回的是 366

SQL 計算年齡 —— 組合起來

學習了兩個函數(shù)的使用方法,下面計算兩個日期相差的年份:

TIMESTAMPDIFF(YEAR, dob, CURDATE())

上式dob字段,在傳遞給TIMESTAMPDIFF函數(shù)之前,需要轉(zhuǎn)化解析為日期格式字符串,才能正常使用。

當前日期是2019年12月20日, 假定生日是1978年8月3日,計算如下:

SELECT TIMESTAMPDIFF(YEAR, '1978-08-03', CURDATE());

計算結(jié)果 41.

MySQL 計算年齡 —— 提高精度

上面的式子,計算出了正確的年齡。但是如果日期格式不完整,缺少月份,或者日期,都不能計算出來結(jié)果。

對應(yīng)同一個月份,或者同一年的日期,計算差值,年總是=0。因此我們提高精度:

TIMESTAMPDIFF(MONTH, dob_field, CURDATE())

計算兩個日期差的月數(shù)。

以此類推:

TIMESTAMPDIFF(DAY, dob_field, CURDATE())

計算兩個日期差的天數(shù)。

舉一反三,我們可以相應(yīng)的計算日期差的月份,和天數(shù)。 例如

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是包含生日的字段,或變量.

舉例說明

創(chuàng)建一張表,字段包含姓名,還有生日:

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));

創(chuàng)建數(shù)據(jù)庫 test_age,然后創(chuàng)建表 t1。

寫入一些隨機數(shù)據(jù):

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');

下面我們根據(jù)生日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);

更新完畢之后,查看結(jié)果

SELECT * FROM T1;

OK,一切結(jié)束,拿上SQL語句去數(shù)據(jù)庫上測試一下吧。

總結(jié)

以上是生活随笔為你收集整理的localdate计算相差天数_还在苦恼MySQL如何根据日期精确计算年龄?看这一篇,就够了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。