SQL如何仅更新datetime类型列的时间部分
仅更新datetime字段时间部分的SQL实现方案
核心逻辑为提取原有datetime值的日期部分,拼接需要的23:59:59时间部分即可实现需求,不同数据库的语法有差异,对应方案如下:
执行前验证(必做,避免数据误改)
先执行SELECT语句确认修改结果符合预期,以MySQL为例:
SELECT id, 你的日期字段名 AS 修改前值, DATE(你的日期字段名) + INTERVAL '23:59:59' HOUR_SECOND AS 修改后值 FROM 你的表名 WHERE id > 38;
确认结果无误后再执行UPDATE语句。
各数据库UPDATE写法
MySQL
UPDATE 你的表名 SET 你的日期字段名 = DATE(你的日期字段名) + INTERVAL '23:59:59' HOUR_SECOND WHERE id > 38;
PostgreSQL
UPDATE 你的表名 SET 你的日期字段名 = 你的日期字段名::DATE + TIME '23:59:59' WHERE id > 38;
SQL Server
UPDATE 你的表名 SET 你的日期字段名 = DATEADD(SECOND, 86399, CAST(CAST(你的日期字段名 AS DATE) AS DATETIME)) WHERE id > 38;
Oracle
UPDATE 你的表名 SET 你的日期字段名 = TRUNC(你的日期字段名) + INTERVAL '23:59:59' HOUR TO SECOND WHERE id > 38;
注意事项
- 所有写法里的
你的表名、你的日期字段名需要替换为你实际的表和字段名称 - 生产环境操作建议开启事务,验证修改结果后再提交,避免数据丢失
内容的提问来源于stack exchange,提问作者Jin Huh
相关产品推荐
相关产品推荐

