本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
mysql求时间差
timediff()函数 - 计算两个TIME或DATETIME值之间的差值。
timestampdiff()函数 - 计算两个DATE或DATETIME值之间的差值。
MySQL TIMEDIFF函数介绍
TIMEDIFF返回两个
TIME或
DATETIME值之间的差值。 请参阅
TIMEDIFF函数的以下语法。
TIMEDIFF(dt1, dt2);
TIMEDIFF函数接受两个必须为相同类型的参数,即
TIME或
DATETIME。
TIMEDIFF函数返回表示为时间值的
dt1 - dt2的结果。
因为
TIMEDIFF函数返回
TIME值,所以其结果被限制在从
-838:59:59到
838:59:59的
TIME值范围内。
MySQL TIMEDIFF函数示例
让我们举一个例子来计算两个时间值之间的差异。
mysql> SELECT TIMEDIFF('12:00:00','10:00:00') diff;
+----------+
| diff |
+----------+
| 02:00:00 |
+----------+
1 row in set在这个例子中,我们计算了
12:00:00和
10:00:00之间的差值为:
02:00:00。
以下示例计算两个
DATETIME值之间的差异值:
mysql> SELECT TIMEDIFF('2010-01-01 01:00:00', '2010-01-02 01:00:00') diff;
+-----------+
| diff |
+-----------+
| -24:00:00 |
+-----------+
1 row in set如果任一参数为
NULL,
TIMEDIFF函数将返回
NULL。
mysql> SELECT TIMEDIFF('2010-01-01',NULL) diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)如果传递两个不同类型的参数,一个是
DATETIME,另一个是
TIME,
TIMEDIFF函数也返回
NULL。
mysql> SELECT TIMEDIFF('2010-01-01 10:00:00','10:00:00') diff;
+------+
| diff |
+------+
| NULL |
+------+
1 row in setMySQL 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参数是确定(
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
使用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视频教程】
