PostgreSQL如何为timestamp类型字段设置默认值为每日09:00
解决方案
问题说明
你当前编写的SQL语句缺少SET DEFAULT后需要指定的默认值规则,对应不同数据库环境的正确写法如下:
PostgreSQL 环境写法
单独设置默认值(已完成字段类型转换时使用)
ALTER TABLE note ALTER COLUMN entered SET DEFAULT CURRENT_DATE + INTERVAL '09:00:00';
合并类型转换+默认值设置(未完成类型转换时使用)
ALTER TABLE note ALTER COLUMN entered TYPE timestamp USING entered::timestamp, ALTER COLUMN entered SET DEFAULT CURRENT_DATE + INTERVAL '09:00:00';
历史数据统一修正为09:00
如果需要把原有date类型转换过来的历史数据的时间部分也改为09:00,执行:
UPDATE note SET entered = entered::date + INTERVAL '09:00:00';
MySQL 环境写法
单独设置默认值(已完成字段类型转换时使用)
ALTER TABLE note ALTER COLUMN entered SET DEFAULT DATE_ADD(CURDATE(), INTERVAL 9 HOUR);
合并类型转换+默认值设置(未完成类型转换时使用)
ALTER TABLE note MODIFY COLUMN entered TIMESTAMP DEFAULT DATE_ADD(CURDATE(), INTERVAL 9 HOUR);
历史数据统一修正为09:00
UPDATE note SET entered = CONCAT(DATE(entered), ' 09:00:00');
注意事项
- timestamp类型会受数据库时区配置影响,若业务涉及多时区场景,建议先确认数据库时区和业务需求匹配。
- 执行表结构变更前建议先备份数据,避免误操作导致数据丢失。
内容的提问来源于stack exchange,提问作者Bosbes
相关产品推荐
相关产品推荐

