我试图通过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);
也返回相同的错误。我不知道为什么早些时候完全可以正常工作时,甚至还会发生此错误。
请帮助。谢谢!
答案 0 :(得分:0)
SEC_TO_TIME返回一个TIME
,因此total_drive_time应该是TIME
而不是VARCHAR
一天中的秒数是86400,您的总和3300971大于该秒。 SEC_TO_TIME
仅转换为小时,分钟和秒,而不转换为几天。