SQL如何对两个不同字段的时间值相加并编写UPDATE语句
时间字段求和更新实现方法
现有表中两个时间类字段:
expected_start_time:存储预期开始时间,示例值为2022-07-14 04:00:00 UTCexpected_runtime:存储预期运行时长,示例值为0000-00-00 00:10:00 UTC
需求为直接引用两个字段完成时间值求和,通过UPDATE语句完成计算写入,不需要硬编码固定时间值,最终求和结果示例为2022-07-14 04:10:00 UTC。
不同数据库的实现语句
MySQL / MariaDB
使用内置ADDTIME()函数直接做时间偏移相加即可,假设计算结果写入同表的expected_end_time字段(替换为你实际使用的目标字段、表名即可):
UPDATE 你的业务表名 SET expected_end_time = ADDTIME(expected_start_time, expected_runtime);
该写法自动处理时间进位:如果运行时长累计超过24小时,会自动累加日期部分,不需要额外写进位逻辑。
PostgreSQL
PostgreSQL中timestamp类型可以直接和时间间隔类型做加法,遇到类型不兼容时显式转换runtime为interval即可:
-- 隐式转换写法(兼容大部分场景) UPDATE 你的业务表名 SET expected_end_time = expected_start_time + expected_runtime; -- 显式类型转换写法(隐式转换报错时使用) UPDATE 你的业务表名 SET expected_end_time = expected_start_time + CAST(expected_runtime AS interval);
校验要点
- 运算前确认两个字段时区配置一致,避免UTC、本地时区混用导致结果出现时间偏移
- 不需要在语句中写死任何固定时间值,所有计算逻辑完全依赖表中存储的字段值
- 可以先执行预览语句核对结果,确认符合预期后再执行UPDATE操作,比如MySQL场景可先执行:
SELECT ADDTIME(expected_start_time, expected_runtime) FROM 你的业务表名 LIMIT 1;
内容的提问来源于stack exchange,提问作者Josh Davis
相关产品推荐
相关产品推荐

