CONVERT_TIMEZONE
功能描述
CONVERT_TIMEZONE
CONVERT_TIMEZONE
函数用于将一个指定的时间戳从一个时区转换到另一个时区。该函数能够处理不同类型的时间格式输入,并在必要时自动进行类型转换。
语法
CONVERT_TIMEZONE(source_tz, target_tz, ts)
CONVERT_TIMEZONE(target_tz, ts)
source_tz
source_tz
string : 原始时区。如果只提供两个参数,则默认使用当前会话的时区作为原始时区。
target_tz
target_tz
string : 目标时区。
ts
ts
int 或 timestamp : 时间戳。如果是整数类型,函数会自动将其转换为时间戳类型。
返回值
转换后的时间戳(timestamp)。
使用示例
-- 示例1:将时间戳从莫斯科时区转换到洛杉矶时区
SELECT CONVERT_TIMEZONE('Europe/Moscow', 'America/Los_Angeles', TIMESTAMP '2022-01-01 00:00:00');
-- 返回结果:2021-12-31T05:00:00.000Z
-- 示例2:将布鲁塞尔时区的时间戳转换到上海时区
SELECT CONVERT_TIMEZONE('Europe/Brussels', 'Asia/Shanghai', TIMESTAMP '2022-03-23 00:00:00');
-- 返回结果:2022-03-22T23:00:00.000Z
-- 示例3:只提供目标时区,将整数时间戳(Unix 秒)转换到东京时区
SELECT CONVERT_TIMEZONE('Asia/Tokyo', TIMESTAMP_SECONDS(1674681600));
-- 返回结果:2023-01-25T22:20:00.000Z
-- 示例4:将整数时间戳从上海时区转换到 UTC
SELECT CONVERT_TIMEZONE('UTC', 'Asia/Shanghai', TIMESTAMP_SECONDS(1674681600));
-- 返回结果:2023-01-26T05:20:00.000Z
注意事项
- 时间戳参数必须是
timestamp
timestamp
类型,字符串字面量需要用 TIMESTAMP '...'
TIMESTAMP '...'
显式转换,或使用 TIMESTAMP_SECONDS()
TIMESTAMP_SECONDS()
等函数转换整数。
- 返回值格式为 ISO 8601(如
2022-03-22T23:00:00.000Z
2022-03-22T23:00:00.000Z
),表示 UTC 时间。
- 请确保输入的时区名称有效,否则函数将返回错误。
- 如果输入的时间戳已经是目标时区的时间,函数将直接返回该时间戳。