如何将含UTC_TIMESTAMP()、DATE_ADD()的MySQL查询转换为PostgreSQL?
MySQL插入语句转PostgreSQL的解决方案
转换后的PostgreSQL插入查询
INSERT INTO snippets (title, content, created, expires) VALUES(?, ?, CURRENT_TIMESTAMP AT TIME ZONE 'UTC', CURRENT_TIMESTAMP AT TIME ZONE 'UTC' + INTERVAL '1 day' * ?);
或者更直观的函数式写法:
INSERT INTO snippets (title, content, created, expires) VALUES(?, ?, CURRENT_TIMESTAMP AT TIME ZONE 'UTC', CURRENT_TIMESTAMP AT TIME ZONE 'UTC' + make_interval(days => ?));
关键函数替换说明
- 替代MySQL的
UTC_TIMESTAMP():使用CURRENT_TIMESTAMP AT TIME ZONE 'UTC',它返回当前UTC时间,且会转换为无时区的TIMESTAMP类型,完全匹配你表中created、expires字段的TIMESTAMP(0)类型要求。 - 替代MySQL的
DATE_ADD():PostgreSQL支持直接对时间值做加减运算,+ INTERVAL '1 day' * ?可以快速实现按指定天数增加时间;如果偏好更清晰的写法,make_interval(days => ?)能明确指定天数参数,效果完全一致。
可选精度处理
由于你的表字段是TIMESTAMP(0)(精度到秒),如果需要确保时间戳严格截断到秒,可以用DATE_TRUNC('second', CURRENT_TIMESTAMP AT TIME ZONE 'UTC')替代原时间表达式,不过PostgreSQL在插入时会自动适配字段精度,这一步不是必须的。
内容的提问来源于stack exchange,提问作者Jon Leopard
相关产品推荐
相关产品推荐

