加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql要如何求时间差

发布时间:2023-04-25 13:40:52 所属栏目:MySql教程 来源:
导读:这篇文章主要介绍了mysql如何求时间差,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

mysql求时间差的方法:1、使用TIMEDIFF()函数,语法
这篇文章主要介绍了mysql如何求时间差,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
 
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
 
FROM
 
    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
 
FROM
 
    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
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!