datediff()僅計算天數差,而timestampdiff()支持多種單位。datediff(date1, date2)返回兩個日期間的天數差,不支持月或年;timestampdiff(unit, datetime1, datetime2)按指定單位(如second、minute…year)計算datetime2 – datetime1的差值;使用時需注意函數功能區別、參數順序及單位正確性,避免結果錯誤。
在處理日期和時間相關的計算時,DATEDIFF() 和 TIMESTAMPDIFF() 是兩個常用的函數。但很多人容易搞混它們的單位參數設置方式,導致結果出錯。這篇文章就來聊聊這兩個函數在使用時需要注意的單位設置問題。
DATEDIFF():只支持天數差,別指望它能算月或年
DATEDIFF() 這個函數的功能其實很簡單,只能用來計算兩個日期之間的天數差。它的語法通常是這樣的:
DATEDIFF(date1, date2)
返回的是 date1 – date2 的天數差。比如:
SELECT DATEDIFF('2025-04-05', '2025-04-01'); -- 返回 4
注意:這個函數不支持按月、年、小時等其他單位來計算,如果你看到有人說“用 DATEDIFF 算兩個日期相差幾個月”,那他大概率是混淆了另一個函數。
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();
- 寫代碼時可以加注釋標明單位,避免后續維護混亂;
- 測試時多選幾個邊界情況驗證,比如跨月、跨年、月初月末等。
基本上就這些。這兩個函數雖然常見,但用對單位才能得出正確結果。有時候看著只是改個參數的事,但理解清楚邏輯后,才能少走彎路。