如何用MySQL将varchar类型时间列加5分钟后更新另一列?
给VARCHAR类型的时间值增加5分钟并更新表列的解决方法
你遇到的#1292 - Truncated incorrect DOUBLE value: '18:42'错误,根源在于maghrib是VARCHAR类型,直接做数值加法时,MySQL会尝试把时间字符串转成DOUBLE类型,转换失败就触发了截断错误。要实现给时间加5分钟的需求,得先把字符串转成时间类型再操作,具体方案如下:
方案1:如果maghrib_jamat是TIME类型
直接将字符串转成时间后添加5分钟,再存入目标列:
UPDATE `prayer_times` SET `maghrib_jamat` = ADDTIME(STR_TO_DATE(`maghrib`, '%H:%i'), '00:05:00');
STR_TO_DATE(maghrib, '%H:%i'):把18:42格式的字符串转成MySQL的TIME类型ADDTIME(..., '00:05:00'):给转换后的时间添加5分钟(参数格式为HH:MM:SS)
方案2:如果maghrib_jamat是VARCHAR类型
需要把计算后的时间再转回HH:MM格式的字符串:
UPDATE `prayer_times` SET `maghrib_jamat` = DATE_FORMAT(ADDTIME(STR_TO_DATE(`maghrib`, '%H:%i'), '00:05:00'), '%H:%i');
DATE_FORMAT(..., '%H:%i'):把运算后的时间类型转成HH:MM格式的字符串,适配VARCHAR列的存储格式
额外建议
为了避免后续再出现类型转换问题,建议把存储时间的列改成TIME类型:
-- 修改maghrib列为TIME类型 ALTER TABLE `prayer_times` MODIFY COLUMN `maghrib` TIME; -- 修改maghrib_jamat列为TIME类型 ALTER TABLE `prayer_times` MODIFY COLUMN `maghrib_jamat` TIME;
修改后,后续更新操作可以直接简化为:
UPDATE `prayer_times` SET `maghrib_jamat` = ADDTIME(`maghrib`, '00:05:00');
内容的提问来源于stack exchange,提问作者abu abu
相关产品推荐
相关产品推荐

