mysql如何求时间差

68次阅读
没有评论

共计 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 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计4064字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)