本教學將向您展示如何使用MySQL TIMEDIFF
函式,並為您提供該函式的一些重要使用說明。
TIMEDIFF
返回兩個TIME或DATETIME值之間的差值。 請參閱TIMEDIFF
函式的以下語法。
TIMEDIFF(dt1, dt2);
TIMEDIFF
函式接受兩個必須為相同型別的引數,即TIME
或DATETIME
。 TIMEDIFF
函式返回表示為時間值的dt1 - dt2
的結果。
因為TIMEDIFF
函式返回TIME
值,所以其結果被限制在從-838:59:59
到838:59:59
的TIME
值範圍內。
請注意,TIMEDIFF
函式接受TIME
或DATETIME
型別的值。要比較兩個DATE
或DATETIME
值之間的差異,可以使用DATEDIFF函式。
讓我們舉一個例子來計算兩個時間值之間的差異。
mysql> SELECT TIMEDIFF('12:00:00','10:00:00') diff;
+----------+
| diff |
+----------+
| 02:00:00 |
+----------+
1 row in set
在這個例子中,我們計算了12:00:00
和10:00:00
之間的差值為:02:00:00
。
以下範例計算兩個DATETIME
值之間的差異值:
mysql> SELECT TIMEDIFF('2010-01-01 01:00:00', '2010-01-02 01:00:00') diff;
+-----------+
| diff |
+-----------+
| -24:00:00 |
+-----------+
1 row in set
如果任一引數為NULL
,TIMEDIFF
函式將返回NULL
。
mysql> SELECT TIMEDIFF('2010-01-01',NULL) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)
如果傳遞兩個不同型別的引數,一個是DATETIME
,另一個是TIME
,TIMEDIFF
函式也返回NULL
。
mysql> SELECT TIMEDIFF('2010-01-01 10:00:00','10:00:00') diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set
請考慮以下範例:
mysql> SELECT TIMEDIFF('2009-03-01 00:00:00', '2009-01-01 00:00:00') diff;
+-----------+
| diff |
+-----------+
| 838:59:59 |
+-----------+
1 row in set, 1 warning (0.00 sec)
可以看到,有一個警告。下面來看看看使用SHOW WARNINGS
語句是什麼。
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '1416:00:00' |
+---------+------+----------------------------------------------+
1 row in set
所以結果應該是1416
小時,但是如前所述,TIMEDIFF
函式的結果是一個TIME
值,範圍是從-838:59:59
到838:59:59
。 因此,MySQL會截斷結果。
要解決此問題,您需要使用TIMESTAMPDIFF
函式,如下所示:
mysql> SELECT TIMESTAMPDIFF(HOUR, '2018-01-01 00:00:00', '2018-03-01 00:00:00') diff;
+------+
| diff |
+------+
| 1416 |
+------+
1 row in set
在本教學中,您已經學習了如何使用MySQL TIMEDIFF
函式來計算兩個TIME
或DATETIME
值之間的差值。