PostgreSQL如何为已有的timestamp时间戳设置指定时间值
解决方案
你可以直接使用如下UPDATE语句完成现有数据的批量修改,完整代码如下:
ALTER TABLE members ALTER COLUMN joined SET DATA TYPE timestamp; ALTER TABLE members ALTER COLUMN joined SET DEFAULT current_timestamp; -- 将所有现有行的joined字段时间设置为对应日期的09:00:00 UPDATE members SET joined = joined::DATE + INTERVAL '9 hours';
如果需要避免误改后续已经插入、时间不为0点的行,可以添加过滤条件,仅修改从date类型转换过来的原始数据:
UPDATE members SET joined = joined::DATE + INTERVAL '9 hours' WHERE joined::TIME = '00:00:00'::TIME;
逻辑说明
joined::DATE会将timestamp类型的joined字段转换为纯日期类型,自动丢弃时间部分,拿到原始的日期值- 拼接
INTERVAL '9 hours'即可得到对应日期09:00:00的timestamp格式数据
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

