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 |
答案 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'));
timestampdiff()