本指南示範了一種計算 MySQL 資料庫中兩個日期之間的年份差異的精確方法。 以下 SQL 表達式提供了精確的計算,處理潛在的閏年複雜度:
<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
。
閏年調整: MySQL 將比較結果解釋為 1(真)或 0(假)。從初始年份差異中減去此結果可確保計算準確,並針對 date1
在同一年內按時間順序排列早於 date2
的情況進行調整。
範例:
讓我們用範例資料來說明:
<code class="language-sql">CREATE TABLE so7749639 (date1 DATE, date2 DATE); INSERT INTO so7749639 VALUES ('2011-07-20', '2011-07-18'), ('2011-07-20', '2010-07-20'), ('2011-06-15', '2008-04-11'), ('2011-06-11', '2001-10-11'), ('2007-07-20', '2004-07-20');</code>
查詢:
<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 so7749639;</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中文網其他相關文章!