共计 4064 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章主要介绍了 mysql 如何求时间差,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
mysql 求时间差的方法:1、使用 TIMEDIFF()函数,语法“TIMEDIFF(dt1, dt2);”;2、使用 IMESTAMPDIFF()函数,语法“TIMESTAMPDIFF(unit,begin,end);
”。
本教程操作环境:windows7 系统、mysql8 版本、Dell G3 电脑。
mysql 求时间差
timediff()函数 – 计算两个 TIME 或 DATETIME 值之间的差值。
timestampdiff()函数 – 计算两个 DATE 或 DATETIME 值之间的差值。
MySQL TIMEDIFF 函数介绍
TIMEDIFF 返回两个 TIME 或 DATETIME 值之间的差值。请参阅 TIMEDIFF 函数的以下语法。
TIMEDIFF(dt1, dt2);
TIMEDIFF 函数接受两个必须为相同类型的参数,即 TIME 或 DATETIME。TIMEDIFF 函数返回表示为时间值的 dt1 – dt2 的结果。
因为 TIMEDIFF 函数返回 TIME 值,所以其结果被限制在从 -838:59:59 到 838:59:59 的 TIME 值范围内。
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 TIMESTAMPDIFF 函数简介
下面说明了 TIMESTAMPDIFF 函数的语法。
TIMESTAMPDIFF(unit,begin,end);
TIMESTAMPDIFF 函数返回 begin-end 的结果,其中 begin 和 end 是 DATE 或 DATETIME 表达式。
TIMESTAMPDIFF 函数允许其参数具有混合类型,例如,begin 是 DATE 值,end 可以是 DATETIME 值。如果使用 DATE 值,则 TIMESTAMPDIFF 函数将其视为时间部分为“00:00:00”的 DATETIME 值。
unit 参数是确定 (end-begin) 的结果的单位,表示为整数。以下是有效单位:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
MySQL TIMESTAMPDIFF 函数示例
以下示例将以月份值的形式返回 2018-01-01 和 2018-06-01 的差值:
mysql SELECT TIMESTAMPDIFF(MONTH, 2018-01-01 , 2018-06-01) result;
+--------+
| result |
+--------+
| 5 |
+--------+
1 row in set
如果您希望看到差值,只需要将 unit 参数从 MONTH 更改为 DAY,如下所示:
mysql SELECT TIMESTAMPDIFF(DAY, 2010-01-01 , 2010-06-01) result;
+--------+
| result |
+--------+
| 151 |
+--------+
1 row in set
以下语句返回两个 DATETIME 值 (以分钟为单位) 的差异值:
mysql SELECT TIMESTAMPDIFF(MINUTE, 2018-01-01 10:00:00 , 2018-01-01 10:45:00) result;
+--------+
| result |
+--------+
| 45 |
+--------+
1 row in set
请注意,TIMESTAMPDIFF 仅考虑与 unit 参数相关的时间部分。请参阅以下示例:
mysql SELECT TIMESTAMPDIFF(MINUTE, 2018-01-01 10:00:00 , 2018-01-01 10:45:59) result;
+--------+
| result |
+--------+
| 45 |
+--------+
1 row in set
差值应该是 45 分 59 秒。但是,我们将 unit 参数传递为 MINUTE,因此,函数按预期返回 45 分钟。
如果使用 SECOND 而不是 MINUTE,则 TIMESTAMPDIFF 函数将考虑 SECOND 部分,如以下示例所示:
mysql SELECT TIMESTAMPDIFF(SECOND, 2018-01-01 10:00:00 , 2018-01-01 10:45:59) result;
+--------+
| result |
+--------+
| 2759 |
+--------+
1 row in set
注:45 分 59 秒 = 45×60 + 59(秒)= 2759 秒
使用 MySQL TIMESTAMPDIFF 函数计算年龄
首先,我们创建一个名为 persons 的新表,用于演示。
USE testdb;
CREATE TABLE persons (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(255) NOT NULL,
date_of_birth DATE NOT NULL
);
其次,向 persons 表中插入一些行:
INSERT INTO persons(full_name, date_of_birth)
VALUES(John Doe , 1990-01-01),
(David Taylor , 1989-06-06),
(Peter Drucker , 1985-03-02),
(Lily Minsu , 1992-05-05),
(Mary William , 1995-12-01
第三步,使用 TIMESTAMPDIFF 来计算 persons 表中每个人的年龄:
SELECT
id,
full_name,
date_of_birth,
TIMESTAMPDIFF(YEAR,
date_of_birth,
2018-01-01 ) age
persons;
执行上面查询语句,得到以下结果 –
+----+---------------+---------------+-----+
| id | full_name | date_of_birth | age |
+----+---------------+---------------+-----+
| 1 | John Doe | 1990-01-01 | 28 |
| 2 | David Taylor | 1989-06-06 | 28 |
| 3 | Peter Drucker | 1985-03-02 | 32 |
| 4 | Lily Minsu | 1992-05-05 | 25 |
| 5 | Mary William | 1995-12-01 | 22 |
+----+---------------+---------------+-----+
5 rows in set
在此语句中,我们计算到 2018-01-01 日为止的年龄。如果要计算当前年龄,可以通过 NOW 函数替换字面值 2018-01-01,如下所示:
SELECT
id,
full_name,
date_of_birth,
TIMESTAMPDIFF(YEAR,
date_of_birth,
NOW()) age
persons;
执行上面查询语句,得到以下结果 –
+----+---------------+---------------+-----+
| id | full_name | date_of_birth | age |
+----+---------------+---------------+-----+
| 1 | John Doe | 1990-01-01 | 27 |
| 2 | David Taylor | 1989-06-06 | 28 |
| 3 | Peter Drucker | 1985-03-02 | 32 |
| 4 | Lily Minsu | 1992-05-05 | 25 |
| 5 | Mary William | 1995-12-01 | 21 |
+----+---------------+---------------+-----+
5 rows in set
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“mysql 如何求时间差”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!