下面说明了TIMESTAMPDIFF
函数的语法。
TIMESTAMPDIFF(unit,begin,end);
TIMESTAMPDIFF
函数返回begin-end
的结果,其中begin
和end
是DATE或DATETIME表达式。
TIMESTAMPDIFF
函数允许其参数具有混合类型,例如,begin
是DATE
值,end
可以是DATETIME
值。 如果使用DATE
值,则TIMESTAMPDIFF
函数将其视为时间部分为“00:00:00”
的DATETIME
值。
unit
参数是确定(end-begin
)的结果的单位,表示为整数。 以下是有效单位:
- MICROSECOND
- SECOND
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
- QUARTER
- YEAR
MySQL TIMESTAMPDIFF函数示例
以下示例将以月份值的形式返回2018-01-01
和2018-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') 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 |
-
+----+---------------+---------------+-----+
-