摘要:在本教程中,您将学习如何使用 MySQL TIMESTAMPDIFF
函数来计算两个DATE
或DATETIME
值之间的差异。
MySQL TIMESTAMPDIFF
函数简介
下面说明了TIMESTAMPDIFF
函数的语法。
TIMESTAMPDIFF(unit,begin,end);
Code language: SQL (Structured Query Language) (sql)
TIMESTAMPDIFF
函数返回begin - end
的结果,其中begin
和end
是DATE
或DATETIME
表达式。
TIMESTAMPDIFF
函数允许其参数具有混合类型,例如, begin
是DATE
值, end
是DATETIME
值。如果您使用DATE
值, TIMESTAMPDIFF
函数会将其视为时间部分为'00:00:00'
DATETIME
值。
unit
参数确定以整数表示的(end - begin)
结果的单位。以下是有效单位:
- 微秒
- 第二
- 分钟
- 小时
- 天
- 星期
- 月
- 四分之一
- 年
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)
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)
在此声明中,我们计算了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
函数来计算两个DATE
或DATETIME
值之间的差异。