mysql怎么求时间差

mysql怎么求时间差,第1张

概述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返回两个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)的结果的单位,表示为整数。 以下是有效单位:

MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR

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') ageFROM    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()) ageFROM    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怎么求时间差全部内容,希望文章能够帮你解决mysql怎么求时间差所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1149799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存