MariaDB CONVERT_TZ() 函数的基础用法与实例

本文将介绍一个与时区转换相关的函数,即 CONVERT_TZ() 函数。

发布于

MariaDB 是一个开源的关系型数据库管理系统,它是 MySQL 的一个分支。MariaDB 提供了许多有用的函数,用于处理各种数据类型,包括日期和时间。本文将介绍一个与时区转换相关的函数,即 CONVERT_TZ() 函数。

语法

CONVERT_TZ() 函数的语法如下:

CONVERT_TZ(dt, from_tz, to_tz)

其中:

  • dt 是要转换的日期和时间值,可以是一个常量,一个变量,或者一个表达式。
  • from_tzdt 的原始时区,可以是一个时区名,例如 'Asia/Shanghai',或者一个时区偏移量,例如 '+08:00'
  • to_tz 是要转换到的目标时区,可以是一个时区名,例如 'America/New_York',或者一个时区偏移量,例如 '-05:00'

CONVERT_TZ() 函数的返回值是一个日期和时间值,表示将 dtfrom_tz 转换到 to_tz 后的结果。如果任何一个参数无效或者不存在,函数将返回 NULL

实例

下面是一些使用 CONVERT_TZ() 函数的实例,以及相应的代码,说明,和运行结果。

使用时区名转换日期和时间

在这个实例中,我们将使用时区名来转换一个日期和时间值,例如,将 '2024-02-07 17:12:13''Asia/Shanghai' 转换到 'America/New_York'

SELECT CONVERT_TZ('2024-02-07 17:12:13', 'Asia/Shanghai', 'America/New_York') AS result;

输出:

result
-------------------
2024-02-07 04:12:13

解释:

  • '2024-02-07 17:12:13' 是一个日期和时间值,表示 2024 年 2 月 7 日下午 5 点 12 分 13 秒。
  • 'Asia/Shanghai' 是一个时区名,表示中国上海的时区,它的时区偏移量是 +08:00,即比协调世界时(UTC)快 8 个小时。
  • 'America/New_York' 是一个时区名,表示美国纽约的时区,它的时区偏移量是 '-05:00',即比协调世界时(UTC)慢 5 个小时。
  • CONVERT_TZ() 函数将 '2024-02-07 17:12:13''Asia/Shanghai' 转换到 'America/New_York',相当于将其减去 13 个小时,得到 '2024-02-07 04:12:13',表示 2024 年 2 月 7 日凌晨 4 点 12 分 13 秒。

使用时区偏移量转换日期和时间

在这个实例中,我们将使用时区偏移量来转换一个日期和时间值,例如,将 '2024-02-07 17:12:13''+08:00' 转换到 '-05:00'

SELECT CONVERT_TZ('2024-02-07 17:12:13', '+08:00', '-05:00') AS result;

输出:

result
-------------------
2024-02-07 04:12:13

解释:

  • '2024-02-07 17:12:13' 是一个日期和时间值,表示 2024 年 2 月 7 日下午 5 点 12 分 13 秒。
  • '+08:00' 是一个时区偏移量,表示比协调世界时(UTC)快 8 个小时的时区,例如中国上海的时区。
  • '-05:00' 是一个时区偏移量,表示比协调世界时(UTC)慢 5 个小时的时区,例如美国纽约的时区。
  • CONVERT_TZ() 函数将 '2024-02-07 17:12:13''+08:00' 转换到 '-05:00',相当于将其减去 13 个小时,得到 '2024-02-07 04:12:13',表示 2024 年 2 月 7 日凌晨 4 点 12 分 13 秒。

使用混合的时区名和时区偏移量转换日期和时间

在这个实例中,我们将使用混合的时区名和时区偏移量来转换一个日期和时间值,例如,将 '2024-02-07 17:12:13''Asia/Shanghai' 转换到 '-05:00'

SELECT CONVERT_TZ('2024-02-07 17:12:13', 'Asia/Shanghai', '-05:00') AS result;

输出:

result
-------------------
2024-02-07 04:12:13

解释:

  • '2024-02-07 17:12:13' 是一个日期和时间值,表示 2024 年 2 月 7 日下午 5 点 12 分 13 秒。
  • 'Asia/Shanghai' 是一个时区名,表示中国上海的时区,它的时区偏移量是 +08:00,即比协调世界时(UTC)快 8 个小时。
  • '-05:00' 是一个时区偏移量,表示比协调世界时(UTC)慢 5 个小时的时区,例如美国纽约的时区。
  • CONVERT_TZ() 函数将 '2024-02-07 17:12:13''Asia/Shanghai' 转换到 '-05:00',相当于将其减去 13 个小时,得到 '2024-02-07 04:12:13',表示 2024 年 2 月 7 日凌晨 4 点 12 分 13 秒。

使用特殊参数转换日期和时间

在这个实例中,我们将使用特殊参数来转换一个日期和时间值,例如,将 '2024-02-07 17:12:13''SYSTEM' 转换到 'UTC'

SELECT CONVERT_TZ('2024-02-07 17:12:13', 'SYSTEM', 'UTC') AS result;

输出:

result
-------------------
2024-02-07 09:12:13

解释:

  • '2024-02-07 17:12:13' 是一个日期和时间值,表示 2024 年 2 月 7 日下午 5 点 12 分 13 秒。
  • 'SYSTEM' 是一个特殊参数,表示使用系统的时区设置,它可以是一个时区名,也可以是一个时区偏移量。在本例中,我们假设系统的时区设置是 '+08:00',即中国上海的时区。
  • 'UTC' 是一个特殊参数,表示使用协调世界时(UTC)。

处理夏令时的日期和时间转换

在这个实例中,我们将处理夏令时的日期和时间转换,例如,将 '2024-03-10 02:00:00''US/Eastern' 转换到 'UTC'

SELECT CONVERT_TZ('2024-03-10 02:00:00', 'US/Eastern', 'UTC') AS result;

输出:

result
-------------------
NULL

解释:

  • '2024-03-10 02:00:00' 是一个日期和时间值,表示 2024 年 3 月 10 日凌晨 2 点。
  • 'US/Eastern' 是一个时区名,表示美国东部的时区,它的时区偏移量通常是 '-05:00',即比协调世界时(UTC)慢 5 个小时。但是,在夏令时期间,它的时区偏移量会变成 '-04:00',即比协调世界时(UTC)慢 4 个小时。
  • 'UTC' 是一个特殊参数,表示使用协调世界时(UTC)。
  • CONVERT_TZ() 函数将 '2024-03-10 02:00:00''US/Eastern' 转换到 'UTC',但是由于在 2024 年 3 月 10 日,美国东部的时区发生了夏令时的变化,从凌晨 2 点跳到凌晨 3 点,所以 '2024-03-10 02:00:00' 这个时间点在 'US/Eastern' 时区不存在,因此函数返回 NULL

相关函数

除了 CONVERT_TZ() 函数外,MariaDB 还提供了一些与时区转换相关的函数,例如:

  • UTC_TIMESTAMP() 函数,它返回当前的协调世界时(UTC)的日期和时间值。

  • FROM_UNIXTIME() 函数,它将一个 Unix 时间戳(以秒为单位的自 1970 年 1 月 1 日起的时间)转换为一个日期和时间值,可以指定一个时区参数。

  • UNIX_TIMESTAMP() 函数,它将一个日期和时间值转换为一个 Unix 时间戳(以秒为单位的自 1970 年 1 月 1 日起的时间),可以指定一个时区参数。

结论

本文介绍了 MariaDB 的 CONVERT_TZ() 函数的基础用法与实例,该函数可以将一个日期和时间值从一个时区转换到另一个时区,可以使用时区名或者时区偏移量作为参数,也可以使用特殊参数如 'SYSTEM''UTC'。本文还介绍了一些与时区转换相关的函数,如 UTC_TIMESTAMP()FROM_UNIXTIME(),和 UNIX_TIMESTAMP()