在MySQL中获取TIMESTAMPs之间的区别并更新另一列

时间:2016-06-10 10:38:24

标签: mysql datetime time sql-update timestamp

MySQL数据库中有2列,数据类型为TIMESTAMP。 对于每一行,我想将hh:mm:ss中的这两个时间戳(hh可能超过24或者也可能是3位)存储到另一列中。

我应该使用什么?

我尝试了这个,但它没有用。

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

colC属于TIME

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

1 个答案:

答案 0 :(得分:0)

time数据类型的小时部分不能保存大于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()
  • 的更多信息