• 技术文章 >数据库 >mysql教程

    mysql怎么求时间差

    青灯夜游青灯夜游2021-12-28 09:08:53原创1066

    mysql求时间差的方法:1、使用TIMEDIFF()函数,语法“TIMEDIFF(dt1, dt2);”;2、使用IMESTAMPDIFF()函数,语法“TIMESTAMPDIFF(unit,begin,end);”。

    本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

    mysql求时间差

    MySQL TIMEDIFF函数介绍

    TIMEDIFF返回两个TIMEDATETIME值之间的差值。 请参阅TIMEDIFF函数的以下语法。

    TIMEDIFF(dt1, dt2);

    TIMEDIFF函数接受两个必须为相同类型的参数,即TIMEDATETIMETIMEDIFF函数返回表示为时间值的dt1 - dt2的结果。

    因为TIMEDIFF函数返回TIME值,所以其结果被限制在从-838:59:59838:59:59TIME值范围内。

    MySQL TIMEDIFF函数示例

    让我们举一个例子来计算两个时间值之间的差异。

    mysql> SELECT TIMEDIFF('12:00:00','10:00:00') diff;
    +----------+
    | diff     |
    +----------+
    | 02:00:00 |
    +----------+
    1 row in set

    在这个例子中,我们计算了12:00:0010: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

    如果任一参数为NULLTIMEDIFF函数将返回NULL

    mysql> SELECT TIMEDIFF('2010-01-01',NULL) diff;
    +------+
    | diff |
    +------+
    | NULL |
    +------+
    1 row in set, 1 warning (0.00 sec)

    如果传递两个不同类型的参数,一个是DATETIME,另一个是TIMETIMEDIFF函数也返回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的结果,其中beginendDATEDATETIME表达式。

    TIMESTAMPDIFF函数允许其参数具有混合类型,例如,beginDATE值,end可以是DATETIME值。 如果使用DATE值,则TIMESTAMPDIFF函数将其视为时间部分为“00:00:00”DATETIME值。

    unit参数是确定(end-begin)的结果的单位,表示为整数。 以下是有效单位:

    MySQL TIMESTAMPDIFF函数示例

    以下示例将以月份值的形式返回2018-01-012018-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

    【相关推荐:mysql视频教程

    以上就是mysql怎么求时间差的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:mysql 时间差
    上一篇:mysql root是什么 下一篇:mysql怎么将字符串转为数字
    PHP编程就业班

    相关文章推荐

    • mysql怎样修改表类型• mysql怎样查询字符长度• mysql字符转换函数是什么• mysql的不足有哪些• mysql怎样修改列属性

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网