2016-06-10 44 views
-1

我在MySQL数据库中有2列,数据类型为TIMESTAMP。 对于每一行,我都希望将这两个时间戳hh:mm:ss(hh可能超过24个,也可能是3个数字)之间的差异存储到另一个列中。获取MySQL中TIMESTAMP之间的差异并更新另一列

我应该使用什么?

我试过这个,但它不工作。

update ABC_TABLE set colC=TIMEDIFF(colA, colB); 

colC是类型TIME

|Field     | Type   | Null | Key | Default | Extra 
+------------------------+--------------+------+-----+---------+-------+ 
| colC     | time   | YES |  | NULL | 
+0

添加你的表记录与你的'更新'查询结果的结果。 –

+0

也发布'show create table abc_table'结果。 –

+0

@RavinderReddy如果没有这些信息,问题是完全正确的。 – fancyPants

回答

0

的时间数据类型的小时部分不能持有超过23值越大你将不得不使用char或varchar。

计算,以秒为两个时间戳之间的差别,就像这样:

SELECT TIMESTAMPDIFF(SECOND, '2016-06-10 11:00:00', '2016-06-10 12:00:00'); 

然后你可以使用此功能将秒转换成格式days:hours:minutes:seconds

DROP FUNCTION IF EXISTS f_s2dhms; 
DELIMITER $$ 
CREATE FUNCTION f_s2dhms(v_seconds INT) 
RETURNS VARCHAR(15) 
DETERMINISTIC 
COMMENT 'converts seconds in days:hours:minutes:seconds' 
BEGIN 
DECLARE v_dhms VARCHAR(15); 
DECLARE v_days INT; 
DECLARE v_hours INT; 
DECLARE v_minutes INT; 

SET v_hours = v_seconds/3600; 
SET v_minutes = (v_seconds % 3600)/60; 
SET v_seconds = (v_seconds % 3600) % 60; 

IF (v_hours > 23) THEN 
    SET v_days = v_hours/24; 
    SET v_hours = v_hours % 24; 
ELSE 
    SET v_days = 0; 
END IF; 

RETURN CONCAT(v_days, ':', RIGHT(CONCAT('0', v_hours), 2), ':', RIGHT(CONCAT('0', v_minutes), 2), ':', RIGHT(CONCAT('0', v_seconds), 2)); 

END $$ 
DELIMITER ; 

使用它像

SELECT f_s2dhms(TIMESTAMPDIFF(SECOND, '2016-06-10 11:00:00', '2016-06-10 12:00:00')); 
  • here你可以阅读更多关于timestampdiff()
相关问题