时间:2021-11-16 16:32:32 | 栏目:Mysql | 点击:次
TIMESTAMPDIFF(unit,begin,end); 根据单位返回时间差,对于传入的begin和end不需要相同的数据结构,可以存在一个为Date一个DateTime
支持的单位有
下面这个例子是对于TIMESTAMPDIFF最基本的用法,
SELECT TIMESTAMPDIFF(MONTH, '2017-01-01', '2017-02-01') as result; +--------+ | result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
SELECT TIMESTAMPDIFF(DAY, '2017-01-01', '2017-02-01') as result; +--------+ | result | +--------+ | 31 | +--------+ 1 row in set (0.00 sec)
SELECT TIMESTAMPDIFF(MINUTE, '2017-01-01 08:00:00', '2017-01-01 08:55:00') result; +--------+ | result | +--------+ | 55 | +--------+ 1 row in set (0.00 sec)
SELECT TIMESTAMPDIFF(MINUTE, '2017-01-01 08:00:00', '2017-01-01 08:55:33') result; +--------+ | result | +--------+ | 55 | +--------+ 1 row in set (0.00 sec)
SELECT TIMESTAMPDIFF(SECOND, '2017-01-01 08:00:00', '2017-01-01 08:55:33') result; 55 * 60 + 33 = 3333 +--------+ | result | +--------+ | 3333 | +--------+ 1 row in set (0.00 sec)
CREATE TABLE demo (id INT AUTO_INCREMENT PRIMARY KEY, start_time DATE NOT NULL, end_time DATE NOT NULL); Query OK, 0 rows affected (0.10 sec)
INSERT INTO demo(start_time, end_time) VALUES('1983-01-01', '1990-01-01'), ('1983-01-01', '1989-06-06'), ('1983-01-01', '1985-03-02'), ('1983-01-01', '1992-05-05'), ('1983-01-01 11:12:11', '1995-12-01');
select * from demo; +----+------------+------------+ | id | start_time | end_time | +----+------------+------------+ | 1 | 1983-01-01 | 1990-01-01 | | 2 | 1983-01-01 | 1989-06-06 | | 3 | 1983-01-01 | 1985-03-02 | | 4 | 1983-01-01 | 1992-05-05 | | 5 | 1983-01-01 | 1995-12-01 | +----+------------+------------+ 5 rows in set (0.00 sec)
select *, TIMESTAMPDIFF(YEAR, start_time, end_time) as duration from demo; +----+------------+------------+----------+ | id | start_time | end_time | duration | +----+------------+------------+----------+ | 1 | 1983-01-01 | 1990-01-01 | 7 | | 2 | 1983-01-01 | 1989-06-06 | 6 | | 3 | 1983-01-01 | 1985-03-02 | 2 | | 4 | 1983-01-01 | 1992-05-05 | 9 | | 5 | 1983-01-01 | 1995-12-01 | 12 | +----+------------+------------+----------+ 5 rows in set (0.00 sec)
select *, if(TIMESTAMPDIFF(YEAR, end_time, CURRENT_TIMESTAMP())< 26 ,'< 26','>= 26') as result from demo; +----+------------+------------+--------+ | id | start_time | end_time | result | +----+------------+------------+--------+ | 1 | 1983-01-01 | 1990-01-01 | >= 26 | | 2 | 1983-01-01 | 1989-06-06 | >= 26 | | 3 | 1983-01-01 | 1985-03-02 | >= 26 | | 4 | 1983-01-01 | 1992-05-05 | < 26 | | 5 | 1983-01-01 | 1995-12-01 | < 26 | +----+------------+------------+--------+ 5 rows in set (0.00 sec)