You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何仅更新timestamp类型字段的时间部分并保留原有日期

仅更新timestamp字段的时间部分(保留原日期)的实现方法

你原有执行语句的问题在于:直接将时间字符串转为timestamp类型时,数据库会自动补全默认日期(一般为当前日期或1970-01-01),会覆盖原有字段的日期部分,因此不符合需求。

核心实现逻辑是:先取出原timestamp字段的日期部分,再拼接你需要设置的新时间部分,组合为新的timestamp值即可。以下是不同数据库环境的具体写法:

PostgreSQL(你原有写法用了::类型转换,大概率是该环境)

update p_bab.registro_ponto
set data_hora = data_hora::date + '10:00:00'::time
where id = 50;

逻辑说明:data_hora::date会提取原字段的日期部分,和指定的时间值拼接后生成新的完整timestamp,完全保留原有日期。

MySQL

UPDATE p_bab.registro_ponto
SET data_hora = TIMESTAMP(DATE(data_hora), '10:00:00')
WHERE id = 50;

也可以用时间差值计算的写法:

UPDATE p_bab.registro_ponto
SET data_hora = data_hora - TIME(data_hora) + '10:00:00'
WHERE id = 50;

SQL Server

UPDATE p_bab.registro_ponto
SET data_hora = DATEADD(day, DATEDIFF(day, 0, data_hora), CAST('10:00:00' AS DATETIME))
WHERE id = 50;

内容的提问来源于stack exchange,提问作者Thiago Salgado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:24:02