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

如何修改DATETIME列的时间部分且不改变日期,解决UPDATE语句执行报错

问题原因

你写的SQL存在两处错误:

  • 语法层面:TIMESTAMP()构造函数的调用方式不符合PostgreSQL语法要求,同时末尾缺少闭合括号,直接触发语法报错
  • 逻辑层面:你试图对两个时间戳类型的值执行加法运算,该运算在SQL中本身不被支持,即使语法修正也无法执行
正确实现方案

方法1:时间间隔加法(适用所有数据时间部分均为00:00:00的场景)

直接给现有时间戳加9小时的时间间隔即可,写法最简单:

UPDATE note
SET entered = entered + INTERVAL '9 hours';

方法2:固定时间拼接(更稳妥,可强制覆盖所有非预期时间)

如果你不能确保所有数据当前时间部分都是0点,想要统一强制将时间设为对应日期的09:00:00,用以下写法:

UPDATE note
SET entered = DATE(entered) + TIME '09:00:00';

该写法会先提取字段的日期部分,再直接拼接指定的9点时间,不受原有时间部分的影响。

注意事项

执行UPDATE操作前建议先运行查询验证结果,避免误改数据:

SELECT entered, DATE(entered) + TIME '09:00:00' AS corrected_time FROM note LIMIT 20;

如果你的entered字段是带时区的timestamptz类型,需要指定时区保证时间符合预期,可以调整为:

UPDATE note
SET entered = (DATE(entered) AT TIME ZONE 'Asia/Shanghai') + TIME '09:00:00' AT TIME ZONE 'Asia/Shanghai';

内容的提问来源于stack exchange,提问作者H. Motsu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:57:00