MySQL   发布时间:2022-05-15  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了mysql怎么求时间差大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

mysql怎么求时间差

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

@H_509_11@mysqL求时间差

  • timediff()函数 - 计算两个TIME或datetiR_80_11845@E值之间的差值。

  • timestampdiff()函数 - 计算两个DATE或datetiR_80_11845@E值之间的差值。

@H_441_25@mysqL TIMEDIFF函数介绍

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

TIMEDIFF(dt1, dt2);

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

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

@H_474_65@mysqL TIMEDIFF函数示例

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

@H_131_37@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

以下示例计算两个datetiR_80_11845@E值之间的差异值:

@H_131_37@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

@H_131_37@mysqL> SELECT TIMEDIFF('2010-01-01',NULL) diff; +------+ | diff | +------+ | NULL | +------+ 1 row in set, 1 warning (0.00 seC)

如果传递两个不同类型的参数,一个是datetiR_80_11845@E,另一个是TIMETIMEDIFF函数也返回NULL

@H_131_37@mysqL> SELECT TIMEDIFF('2010-01-01 10:00:00','10:00:00') diff; +------+ | diff | +------+ | NULL | +------+ 1 row in set@H_901_109@mysqL timestAMPDIFF函数简介

下面说明了timestAMPDIFF函数的语法。

timestAMPDIFF(unit,begin,end);

timestAMPDIFF函数返回begin-end的结果,其中beginendDATEdatetiR_80_11845@E表达式。

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

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

    @H_779_16@mICROSECOND
  • SECOND
  • minutE
  • HOUR
  • DAY
  • WEEK
  • @H_779_16@mONTH
  • QUARTER
  • YEAR

@H_284_10@mysqL timestAMPDIFF函数示例

以下示例将以月份值的形式返回2018-01-012018-06-01的差值:

@H_131_37@mysqL> SELECt timestampDIFF(MONTH, '2018-01-01', '2018-06-01') result; +--------+ | result | +--------+ | 5 | +--------+ 1 row in set

如果您希望看到差值,只需要将unit参数从@H_356_28@mONTH更改为DAY,如下所示:

@H_131_37@mysqL> SELECt timestampDIFF(DAY, '2010-01-01', '2010-06-01') result; +--------+ | result | +--------+ | 151 | +--------+ 1 row in set

以下语句返回两个datetiR_80_11845@E值(以分钟为单位)的差异值:

@H_131_37@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参数相关的时间部分。 请参阅以下示例:

@H_131_37@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部分,如以下示例所示:

@H_131_37@mysqL> SELECt timestampDIFF(SECOND, '2018-01-01 10:00:00', '2018-01-01 10:45:59') result; +--------+ | result | +--------+ | 2759 | +--------+ 1 row in set

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: