摘要:本教程向您展示如何使用 MySQL TIMEDIFF
函数,并为您提供该函数的一些重要使用说明。
MySQL TIMEDIFF
函数简介
TIMEDIFF
返回两个TIME
或DATETIME
值之间的差异。请参阅TIMEDIFF
函数的以下语法。
TIMEDIFF(dt1, dt2);
Code language: SQL (Structured Query Language) (sql)
TIMEDIFF
函数接受两个必须为相同类型的参数,即TIME
或DATETIME
。 TIMEDIFF
函数返回以时间值表示的dt1 - dt2
结果。
由于TIMEDIFF
函数返回TIME
值,因此其结果仅限于TIME
值允许的范围,即-838:59:59
到838:59:59
。
请务必注意, 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 (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
在此示例中,我们计算了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 (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
如果任一参数为NULL
,则TIMEDIFF
函数返回NULL
。
mysql> SELECT TIMEDIFF('2010-01-01',NULL) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
如果传递两个不同类型的参数(一个是DATETIME
,另一个是TIME
, TIMEDIFF
函数也会返回 NULL。
mysql> SELECT TIMEDIFF(
'2010-01-01 10:00:00',
'10:00:00') diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
MySQL TIMEDIFF
函数和截断不正确的时间值
考虑以下示例。
SELECT
TIMEDIFF('2009-03-01 00:00:00',
'2009-01-01 00:00:00') diff;
Code language: SQL (Structured Query Language) (sql)
它返回以下结果:
+------------+
| diff |
+------------+
| 838:59:59 |
+------------+
1 row in set, 1 warning (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
如您所见,我们收到了一个警告。让我们使用SHOW WARNINGS
语句看看它是什么。
mysql> SHOW WARNINGS;
+---------+------+-----------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '1416:00:00' |
+---------+------+-----------------------------------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
因此结果应该是 1416 小时,但是,正如我们前面提到的, TIMEDIFF
函数的结果是一个范围从-838:59:59
到838:59:59
的TIME
值。因此,MySQL 截断了结果。
要解决此问题,您需要使用TIMESTAMPDIFF
函数,如下所示:
SELECT TIMESTAMPDIFF(
HOUR,
'2009-01-01 00:00:00',
'2009-03-01 00:00:00') diff;
Code language: SQL (Structured Query Language) (sql)
下面显示了两个DATETIME
值之间的差异(以小时为单位):
+------+
| diff |
+------+
| 1416 |
+------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了如何使用 MySQL TIMEDIFF
函数来计算两个TIME
或DATETIME
值之间的差异。