2010-03-22 104 views

回答

171

怎麼樣的DATEDIFF功能?

引述手冊的頁面:

DATEDIFF()返回表達式1 - 表達式2 表示爲從一個 日至其它在天的值。 expr1和expr2 是日期或日期和時間表達式。 只有值的日期部分 計算中使用


在你的情況,你會使用:

mysql> select datediff('2010-04-15', '2010-04-12'); 
+--------------------------------------+ 
| datediff('2010-04-15', '2010-04-12') | 
+--------------------------------------+ 
|         3 | 
+--------------------------------------+ 
1 row in set (0,00 sec) 

但需要注意的日期應寫爲YYYY-MM-DD,而不是像你發佈的DD-MM-YYYY

+0

是的,當我提出問題時,我忘記了日期格式; p 謝謝 – Audel 2010-03-22 08:18:41

+2

P.S. YYYY-MM-DD是ISO 8601標準,所以每個人都應該使用它。非常實用。 – 2016-10-18 12:55:40

+0

**注意**:第一個參數必須大於'datediff()'方法的第二個參數,否則它將返回負值。 – Shashanth 2017-06-30 08:41:08

14

使用DATEDIFF()函數。從文檔

例子:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); 
    -> 1 
25

請注意,如果你想計數豐滿24天在2個日期之間,datediff可以爲你返回錯誤的值。

如文檔狀態:

只有值的日期部分是在計算中使用。

這導致

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

返回1,而不是0預期

溶液使用select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (註釋的比較DATEDIFF參數相反的順序)。

一些例子:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); 返回0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); 返回1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now());返回自2016年4月13日11:00有多少全日24小時已經過去了:00直到現在

希望它能幫助某人,因爲一開始並不是那麼明顯,爲什麼datediff返回的值似乎是意外或錯誤的。