MySQL TIMESTAMPDIFF函数

时间:2019-11-20 08:52:23  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL TIMESTAMPDIFF函数来计算两个DATE或DATETIME值之间的差。

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参数确定以整数表示的(结束-开始)结果的单位。
以下是有效单位:

  • 微秒
  • 第二
  • 分钟
  • 小时
  • 25美分硬币

MySQL TIMESTAMPDIFF函数示例

以下示例以月为单位返回2010-01-01和2010-06-01的差额:

SELECT 
    TIMESTAMPDIFF(MONTH, '2010-01-01', '2010-06-01') result;

+--------+
| result |
+--------+
|      5 |
+--------+
1 row in set (0.00 sec)

如果要查看天数差异,只需将unit参数从MONTH更改为DAY,如下所示:

SELECT 
    TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;
+--------+
| result |
+--------+
|    151 |
+--------+
1 row in set (0.00 sec)

以下语句以分钟为单位返回两个DATETIME值的差:

SELECT 
    TIMESTAMPDIFF(MINUTE, '2010-01-01 10:00:00', '2010-01-01 10:45:00') result;
+--------+
| result |
+--------+
|     45 |
+--------+
1 row in set (0.00 sec)

请注意,TIMESTAMPDIFF仅考虑与unit参数相关的时间部分。
请参见以下示例:

SELECT TIMESTAMPDIFF(MINUTE, '2010-01-01 10:00:00', '2010-01-01 10:45:59') result;
+--------+
| result |
+--------+
|     45 |
+--------+
1 row in set (0.00 sec)

差异应为45分钟59秒。
但是,我们将unit参数传递为MINUTE,因此该函数将按预期返回45分钟。

如果使用SECOND而不是MINUTE,则TIMESTAMPDIFF函数将考虑SECOND部分,如以下示例所示:

SELECT 
    TIMESTAMPDIFF(SECOND, '2010-01-01 10:00:00', '2010-01-01 10:45:59') result;
+--------+
| result |
+--------+
|   2759 |
+--------+
1 row in set (0.00 sec)

45分钟59秒= 45 x 60 + 59(秒)= 2759秒

使用MySQL TIMESTAMPDIFF函数计算年龄

首先,我们为演示创建一个名为person的新表。

CREATE TABLE persons (
    id INT AUTO_INCREMENT PRIMARY KEY,
    full_name VARCHAR(255) NOT NULL,
    date_of_birth DATE NOT NULL
);

其次,我们在人员表中插入一些行:

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 Smith', '1992-05-05'),
      ('Mary William', '1995-12-01');

第三,我们使用TIMESTAMPDIFF来计算人员表中每个人的年龄:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        '2017-01-01') age
FROM
    persons;

在此语句中,我们计算了2017年1月1日的年龄。
如果要计算当前年龄,可以使用NOW函数替换文字值2017-01-01,如下所示:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        NOW()) age
FROM
    persons;

在本教程中,您学习了如何使用MySQL TIMESTAMPDIFF函数来计算两个DATE或DATETIME值之间的差。