日期差計算:DATEDIFF()和TIMESTAMPDIFF()的單位參數如何正確設置?

datediff()僅計算天數差,而timestampdiff()支持多種單位。datediff(date1, date2)返回兩個日期間的天數差,不支持月或年;timestampdiff(unit, datetime1, datetime2)按指定單位(如second、minute…year)計算datetime2 – datetime1的差值;使用時需注意函數功能區別、參數順序及單位正確性,避免結果錯誤。

日期差計算:DATEDIFF()和TIMESTAMPDIFF()的單位參數如何正確設置?

在處理日期和時間相關的計算時,DATEDIFF() 和 TIMESTAMPDIFF() 是兩個常用的函數。但很多人容易搞混它們的單位參數設置方式,導致結果出錯。這篇文章就來聊聊這兩個函數在使用時需要注意的單位設置問題。

日期差計算:DATEDIFF()和TIMESTAMPDIFF()的單位參數如何正確設置?


DATEDIFF():只支持天數差,別指望它能算月或年

DATEDIFF() 這個函數的功能其實很簡單,只能用來計算兩個日期之間的天數差。它的語法通常是這樣的:

日期差計算:DATEDIFF()和TIMESTAMPDIFF()的單位參數如何正確設置?

DATEDIFF(date1, date2)

返回的是 date1 – date2 的天數差。比如:

SELECT DATEDIFF('2025-04-05', '2025-04-01'); -- 返回 4

注意:這個函數不支持按月、年、小時等其他單位來計算,如果你看到有人說“用 DATEDIFF 算兩個日期相差幾個月”,那他大概率是混淆了另一個函數。

日期差計算:DATEDIFF()和TIMESTAMPDIFF()的單位參數如何正確設置?


TIMESTAMPDIFF():靈活多單位計算,單位參數很關鍵

如果你想按分鐘、小時、天、周、月、年等不同單位來計算兩個時間點之間的差異,應該使用 TIMESTAMPDIFF()。它的基本語法如下:

TIMESTAMPDIFF(unit, datetime1, datetime2)

其中,unit 是你指定的單位,順序是 datetime2 – datetime1(注意順序是反的)。常見的單位包括:

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

舉個例子:

SELECT TIMESTAMPDIFF(MONTH, '2024-01-15', '2025-03-10'); -- 返回 13,因為從2024年1月到2025年3月有13個月

block||||||||block


常見錯誤與建議

使用這兩個函數時,有幾個容易踩坑的地方,值得特別提醒一下:

  • ? 想當然地認為 DATEDIFF() 可以計算月份差 → 它只能算天數差。
  • ? 把 TIMESTAMPDIFF() 的兩個日期順序搞反了 → 結果會是負數。
  • ? 單位寫錯拼寫或者用了中文單位 → sql 報錯或結果不對。

建議:

  • 如果只需要天數差,用 DATEDIFF() 最簡單;
  • 如果需要更精細的單位(比如月、年),優先用 TIMESTAMPDIFF();
  • 寫代碼時可以加注釋標明單位,避免后續維護混亂;
  • 測試時多選幾個邊界情況驗證,比如跨月、跨年、月初月末等。

基本上就這些。這兩個函數雖然常見,但用對單位才能得出正確結果。有時候看著只是改個參數的事,但理解清楚邏輯后,才能少走彎路。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享