MySQL timediff()函式

2019-10-16 22:55:17

本教學將向您展示如何使用MySQL TIMEDIFF函式,並為您提供該函式的一些重要使用說明。

MySQL TIMEDIFF函式介紹

TIMEDIFF返回兩個TIMEDATETIME值之間的差值。 請參閱TIMEDIFF函式的以下語法。

TIMEDIFF(dt1, dt2);

TIMEDIFF函式接受兩個必須為相同型別的引數,即TIMEDATETIMETIMEDIFF函式返回表示為時間值的dt1 - dt2的結果。

因為TIMEDIFF函式返回TIME值,所以其結果被限制在從-838:59:59838:59:59TIME值範圍內。

請注意,TIMEDIFF函式接受TIMEDATETIME型別的值。要比較兩個DATEDATETIME值之間的差異,可以使用DATEDIFF函式。

MySQL TIMEDIFF函式範例

讓我們舉一個例子來計算兩個時間值之間的差異。

mysql> SELECT TIMEDIFF('12:00:00','10:00:00') diff;
+----------+
| diff     |
+----------+
| 02:00:00 |
+----------+
1 row in set

在這個例子中,我們計算了12:00:0010: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

如果任一引數為NULLTIMEDIFF函式將返回NULL

mysql> SELECT TIMEDIFF('2010-01-01',NULL) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)

如果傳遞兩個不同型別的引數,一個是DATETIME,另一個是TIMETIMEDIFF函式也返回NULL

mysql> SELECT TIMEDIFF('2010-01-01 10:00:00','10:00:00') diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set

MySQL TIMEDIFF函式和截斷的不正確的時間值

請考慮以下範例:

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:59838: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函式來計算兩個TIMEDATETIME值之間的差值。