MySQL中的CONVERT_TZ() 函数

CONVERT_TZ() 是 MySQL 中用于在不同时区之间转换时间的函数。它能够将一个时间值从一个时区转换为另一个时区,非常适用于处理跨时区的时间数据。

函数语法

CONVERT_TZ() 的语法如下:

1
CONVERT_TZ(datetime_expr, from_tz, to_tz)
  • datetime_expr:要转换的时间值,可以是 DATE、TIME 或 DATETIME 类型。
  • from_tz:源时区,表示 datetime_expr 所在的时区。
  • to_tz:目标时区,表示要将时间转换到的时区。

官方文档:https://dev.mysql.com/doc/refman/8.4/en/date-and-time-functions.html#function_convert-tz

示例

以下是一些使用 CONVERT_TZ() 的示例:

示例 1:将 UTC 时间转换为北京时间

1
SELECT CONVERT_TZ('2025-01-01 00:00:00', 'UTC', 'Asia/Shanghai') AS converted_time;

示例 2:将北京时间转换为 UTC 时间

1
SELECT CONVERT_TZ('2025-01-01 08:00:00', 'Asia/Shanghai', 'UTC') AS converted_time;

示例 3:使用时区偏移量

1
SELECT CONVERT_TZ('2025-01-01 00:00:00', ' 00:00', ' 08:00') AS converted_time;

示例 4:处理无效输入

如果输入的时间格式不正确,或者时区名称无效,CONVERT_TZ() 将返回 NULL:

1
SELECT CONVERT_TZ('2025-01-01', 'UTC', 'Invalid/TimeZone') AS converted_time;

相关时区表

  • mysql.time_zone:存储时区的基本信息

  • mysql.time_zone_leap_second:存储闰秒信息

  • mysql.time_zone_name:存储时区名称与时区 ID 的映射关系

  • mysql.time_zone_transition:记录时区转换的时间点和转换类型

  • mysql.time_zone_transition_type:存储时区转换的具体规则

注意事项

  • 时区表必须已加载:CONVERT_TZ() 函数依赖于 MySQL 的时区表。如果时区表未加载,函数将无法正常工作。可以通过运行以下命令加载时区表:
1
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

/usr/share/zoneinfo 是 Linux 系统中时区文件的常见路径,具体路径可能因操作系统而异。

官方文档:https://dev.mysql.com/doc/refman/8.4/en/time-zone-support.html

  • 时区名称大小写敏感:时区名称是大小写敏感的,必须与 MySQL 时区表中的名称完全一致。

  • 时区偏移量的限制:时区偏移量的范围是 -14:00 到 14:00。

  • MySQL 版本要求:CONVERT_TZ() 函数在 MySQL 5.5 及以上版本中可用。