https://blog.noname.cc/2023/01/16/20230116/
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 之后
DATE_FORMAT(TIMESTAMP, 'yyyy-MM-dd hh:mm:ss') as string_field
-- UNIX_TIMESTAMP 默认会使用 local time-zone, 而 DATE_FORMAT 默认会使用 UTC-0 时区的时间, 使用 UNIX_TIMESTAMP 前应该使用 CONVERT_TIMEZONE 将 UTC-0 转换为 local time-timezone
CONVERT_TZ(string_field, 'UTC', 'Asia/Shanghai') as string_field
UNIX_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as bigint_field
-- BIGINT TO TIMESTAMP
FROM_UNIXTIME(bigint_field, 'yyyy-MM-dd hh:mm:ss') as string_field
-- FROM_UNIXTIME 默认会使用 local time-zone, 而 TO_TIMESTAMP 默认会使用 UTC-0 时区的时间, 使用 TO_TIMESTAMP 前应该使用 CONVERT_TIMEZONE 转换为 UTC-0 时区
CONVERT_TZ(string_field, 'Asia/Shanghai', 'UTC') as string_field
TO_TIMESTAMP(string_field, 'yyyy-MM-dd hh:mm:ss') as timestamp_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)
标签:string,--,TIMESTAMP,FlinkSQL,转化,field,BIGINT,LTZ,小结
From: https://www.cnblogs.com/0x12345678/p/17057062.html