首页/数据/SQL 速查/时间戳与时区:CONVERT_TZ 与 AT TIME ZONE
函数速查60 条

时间戳与时区:CONVERT_TZ 与 AT TIME ZONE

跨时区存取的两种主流做法:MySQL 用 CONVERT_TZ 显式换算(依赖时区表);PostgreSQL 用 AT TIME ZONE 配合 timestamptz。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
-- 需要先导入时区表(mysql_tzinfo_to_sql),否则返回 NULL
SELECT CONVERT_TZ('2024-06-01 10:00:00', 'Asia/Shanghai', 'UTC');
SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+00:00');
-- TIMESTAMP 列按会话时区自动换算;DATETIME 列原样存取

PostgreSQL

PostgreSQL
SELECT TIMESTAMPTZ '2024-06-01 10:00:00+08' AT TIME ZONE 'UTC';
-- 2024-06-01 02:00:00
SELECT now() AT TIME ZONE 'Asia/Shanghai';   -- 换算成上海墙上时间
MySQLCONVERT_TZ(dt, from, to);时区表未导入时返回 NULL
PostgreSQLtimestamptz 存 UTC,按 TimeZone 显示;AT TIME ZONE 显式换算
存储建议统一以 UTC 或带时区类型落库,仅在展示层转换

易错点

  • MySQL 服务器没导入时区表时 CONVERT_TZ 静默返回 NULL,上线前务必验证一次
  • MySQL TIMESTAMP 列随会话时区变化、DATETIME 不随;同一列混用两种类型会导致对账口径不一致

数据来源与参考

  • MySQL 8.0 Reference Manual · CONVERT_TZ
  • PostgreSQL Documentation · Date/Time Functions and Operators
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌