MySQL TIMESTAMPDIFF Function

摘要:在本教程中,您将学习如何使用 MySQL TIMESTAMPDIFF函数来计算两个DATEDATETIME值之间的差异。

MySQL TIMESTAMPDIFF函数简介

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

TIMESTAMPDIFF(unit,begin,end);
Code language: SQL (Structured Query Language) (sql)

TIMESTAMPDIFF函数返回begin - end的结果,其中beginendDATEDATETIME表达式。

TIMESTAMPDIFF函数允许其参数具有混合类型,例如, beginDATE值, endDATETIME值。如果您使用DATE值, TIMESTAMPDIFF函数会将其视为时间部分为'00:00:00' DATETIME值。

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

  • 微秒
  • 第二
  • 分钟
  • 小时
  • 星期
  • 四分之一

MySQL TIMESTAMPDIFF 函数示例

以下示例返回2010-01-012010-06-01的月份差异:

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

+--------+
| result |
+--------+
|      5 |
+--------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)

如果您想查看天数的差异,只需将单位参数从MONTH更改为DAY ,如下所示:

SELECT 
    TIMESTAMPDIFF(DAY, '2010-01-01', '2010-06-01') result;
+--------+
| result |
+--------+
|    151 |
+--------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)

以下语句返回两个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)
Code language: SQL (Structured Query Language) (sql)

请注意, 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)
Code language: SQL (Structured Query Language) (sql)

差距应该是 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)
Code language: SQL (Structured Query Language) (sql)

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

使用 MySQL TIMESTAMPDIFF 函数计算年龄

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

CREATE TABLE persons (
    id INT AUTO_INCREMENT PRIMARY KEY,
    full_name VARCHAR(255) NOT NULL,
    date_of_birth DATE NOT NULL
);
Code language: SQL (Structured Query Language) (sql)

其次,我们将一些行插入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 Smith', '1992-05-05'),
      ('Mary William', '1995-12-01');
Code language: SQL (Structured Query Language) (sql)

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

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        '2017-01-01') age
FROM
    persons;
Code language: SQL (Structured Query Language) (sql)
MySQL TIMESTAMPDIFF function

在此声明中,我们计算了January 1st 2017的年龄。如果要计算当前年龄,可以将文字值2017-01-01替换为NOW函数,如下所示:

SELECT 
    id,
    full_name,
    date_of_birth,
    TIMESTAMPDIFF(YEAR,
        date_of_birth,
        NOW()) age
FROM
    persons; 
Code language: SQL (Structured Query Language) (sql)

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

本教程有帮助吗?