本教程将向您展示如何使用MySQL TIMEDIFF
函数,并为您提供该函数的一些重要使用说明。
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 TIMEDIFF函数示例
让我们举一个例子来计算两个时间值之间的差异。
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 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: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
值之间的差值。