从秒转换为时间后,截断了错误的时间值

时间:2019-06-29 02:23:28

标签: mysql

我试图通过MySQL中的各种时间函数和转换来获取每个用户的行驶时间之和。但是,由于某种原因,即使我的代码在今天早些时候可以运行,并且我也没有进行任何更改,但是我的代码不再可用。

这就是我要运行的

DROP TABLE IF EXISTS super_users;

 /* creates empty table */ 
CREATE TABLE super_users(
super_user_name VARCHAR (50), 
total_drives INT (3),
total_paid DECIMAL (10, 2),
total_drive_time VARCHAR(40),
average_paid DECIMAL (10, 2),
average_drive_time VARCHAR(40),
total_months_of_driving INT (2),
id VARCHAR (40));

SET SQL_SAFE_UPDATES = 0;

/* imports all user ids into table */    
INSERT INTO super_users(id)
SELECT DISTINCT id FROM drive_data_final
GROUP BY id; 

    UPDATE super_users
    SET total_drive_time = (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(drive_end_time, drive_start_time)))) FROM drive_data_final WHERE id = super_users.id);

但是,我不断得到

  

错误代码:1292。截断了错误的时间值:'3300971'

我尝试将代码分解为较小的部分,并且在取出SEC_TO_TIME部分并随后执行SELECT SEC_TO_TIME(total_drive_time)之后没有问题,这给了我想要保存的值。但是,当我尝试

UPDATE super_users
    SET total_drive_time = (SELECT SUM(TIME_TO_SEC(TIMEDIFF(drive_end_time, drive_start_time))) FROM drive_data_final WHERE id = super_users.id);

UPDATE super_users
    SET total_drive_time = SEC_TO_TIME(total_drive_time);

也返回相同的错误。我不知道为什么早些时候完全可以正常工作时,甚至还会发生此错误。

请帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

SEC_TO_TIME返回一个TIME,因此total_drive_time应该是TIME而不是VARCHAR

一天中的秒数是86400,您的总和3300971大于该秒。 SEC_TO_TIME仅转换为小时,分钟和秒,而不转换为几天。