FlinkSQL 时间转换函数汇总
Flink SQL的时间类型
在 Flink SQL 中,存在两种时间类型, 分别是 TIMESTAMP 和 TIMESTAMP_LTZ.
以下示例所用的字段: TIMESTAMP_FIELD, TIMESTAMP_LTZ_FIELD, BIGINT_FIELD, STRING_FIELD 分别代表对应类型的字段.
TIMESTAMP
TIMESTAMP <-> BIGINT
-- 在 Flink 1.14 之前
-- TIMESTAMP TO BIGINT
-- 在 Flink 1.14 之前 直接使用 cast 将 TIMESTAMP 转换为 BIGINT
CAST(timestamp_field as BIGINT) as bigint_field
-- BIGINT TO TIMESTAMP
CAST(bigint_field as TIMESTAMP) as timestamp_field
------------------------------------
-- 在 Flink 1.14 之后
-- TIMESTAMP TO BIGINT
-- 1. TIMESTAMP TO BIGINT
cast(TIMESTAMP as STRING) as string_field
-- 2. STRING TO BIGINT
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field
-- BIGINT TO TIMESTAMP
-- 1. BIGINT TO STRING
FROM_UNIXTIME(bigint_field, 'yyyy-MM-dd hh:mm:ss') as string_field
-- 2.STRING TO TIMESTAMP
TO_TIMESTAMP(string_field)
TIMESTAMP <-> STRING
TIMESTAMP 和 STRING 进行互转时, 默认使用的都是 UTC-0 时区
-- 将 TIMESTAMP 类型按照指定的格式转换为 STRING
DATE_FORMAT(timestamp_field, 'yyyy-MM-dd hh:mm:ss')
-- 将 STRING 类型字段转换为 TIMESTAMP 类型
TO_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss')
TIMESTAMP_LTZ
TIMESTAMP_LTZ <-> BIGINT
-- 将 TIMESTAMP_LTZ 类型转换为 BIGINT
-- 1. 将 TIMESTAMP_LTZ 按照指定格式转换为 STRING
-- 2. 将 STRING 转换为 时间戳 BIGINT
DATE_FORMAT(timestamp_ltz_field, 'yyyy-MM-dd hh:mm:ss') as string_field;
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss')
-- 将 BIGINT 转换为 TIMESTAMP_LTZ
-- 直接使用 TO_TIMESTAMP_LTZ 函数
TO_TIMESTAMP_LTZ(bigint_field, 3);
TIMESTAMP_LTZ -> STRING
-- 将 TIMESTAMP_LTZ 按照指定格式转换为 STRING
DATE_FORMAT(timestamp_ltz_field, 'yyyy-MM-dd hh:mm:ss')
-- 将 STRING 转换为 TIMESTAMP_LTZ
-- 1. 将 STRING 转换为 BIGINT 时间戳
-- 2. 将 BIGINT 转换为 TIMESTAMP_LTZ
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field;
TO_TIMESTAMP_LTZ(bigint_field, 3);
OTHER
BIGINT <-> STRING
-- 将时间戳 BIGINT 直接格式化为 STRING
FROM_UNIXTIME(bigint_field, 'yyyy-MM-dd hh:mm:ss') as string_field
-- 将 STRING 转换为 BIGINT 类型
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field
TIMESTAMP <-> TIMESTAMP_LTZ
-- 可以直接 cast ,但是要注意时区的转换
CAST(timestamp_field as TIMESTAMP_LTZ)
CAST(timestamp_ltz_field as TIMESTAMP)
posted on 2023-01-17 09:57 Hackergin 阅读(12815) 评论(0) 编辑 收藏 举报