首頁 > 資料庫 > mysql教程 > 如何使用 MySQL 有效率地計算兩個日期之間的年齡差?

如何使用 MySQL 有效率地計算兩個日期之間的年齡差?

Susan Sarandon
發布: 2025-01-09 18:17:41
原創
213 人瀏覽過

How to Efficiently Calculate the Age Difference in Years Between Two Dates Using MySQL?

使用MySQL日期計算年份差

在MySQL中,確定兩個日期之間相差的年份是一個常見任務。本文提供了一個高效的單表達式解決方案,該方案考慮了閏年。

問題陳述:

給定以下格式的兩個日期:'YYYY-MM-DD',我們需要計算年份差。例如:

  • 2011-07-20 - 2011-07-18 => 0 年
  • 2011-07-20 - 2010-07-20 => 1 年
  • 2011-06-15 - 2008-04-11 => 3 年
  • 2011-06-11 - 2001-10-11 => 9 年

解:

<code class="language-sql">YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))</code>
登入後複製

說明:

  • YEAR(date1) - YEAR(date2) 計算年份差。
  • DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d') 比較兩個日期的月和日部分。如果 date1 的月日小於 date2 的月日,則表達式結果為真 (1),否則為假 (0)。
  • 減去真或假值 (1 或 0) 會相應地調整結果。

範例:

以下查詢計算給定測試案例的年份差:

<code class="language-sql">SELECT date1, date2,
YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) AS diff_years
FROM (
    SELECT '2011-07-20' AS date1, '2011-07-18' AS date2 UNION ALL
    SELECT '2011-07-20', '2010-07-20' UNION ALL
    SELECT '2011-06-15', '2008-04-11' UNION ALL
    SELECT '2011-06-11', '2001-10-11' UNION ALL
    SELECT '2007-07-20', '2004-07-20'
) AS dates;</code>
登入後複製

輸出:

<code>+------------+------------+------------+
| date1      | date2      | diff_years |
+------------+------------+------------+
| 2011-07-20 | 2011-07-18 |          0 |
| 2011-07-20 | 2010-07-20 |          1 |
| 2011-06-15 | 2008-04-11 |          3 |
| 2011-06-11 | 2001-10-11 |          9 |
| 2007-07-20 | 2004-07-20 |          3 |
+------------+------------+------------+</code>
登入後複製

以上是如何使用 MySQL 有效率地計算兩個日期之間的年齡差?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板