文章目录
- 一、数据需求:
- 二、探索路程
-
- [1、UNIX_TIMESTAMP + CONVERT_TZ](#1、UNIX_TIMESTAMP + CONVERT_TZ)
- 2、UNIX_TIMESTAMP
- 三、解决方案
-
- [TIMESTAMPADD + TO_TIMESTAMP](#TIMESTAMPADD + TO_TIMESTAMP)
一、数据需求:
将时间字符串格式化,转变成时间戳,再加8小时后写入clickhouse
bash
2023-10-17T03:00:42.506205807 ----> 2023-10-17 11:00:42.506
二、探索路程
1、UNIX_TIMESTAMP + CONVERT_TZ
(该方法默认精确度为秒,不适用毫秒)
(1)UNIX_TIMESTAMP
作用:将时间字符串转换成时间戳
用法:UNIX_TIMESTAMP(STRING datestr, STRING format)
sql
eg:
UNIX_TIMESTAMP('1970-01-01 08:00:01', 'yyyy-MM-dd HH:mm:ss.SSS')
(2)CONVERT_TZ
作用:转换时区
用法:CONVERT_TZ(string1, string2, string3)
sql
eg:
CONVERT_TZ('1970-01-01 08:00:01', 'UTC', 'Asia/Shanghai')
2、UNIX_TIMESTAMP
(实测仅获取当前10位时间戳)
作用:将时间字符串转换成时间戳,并转换时区
用法:UNIX_TIMESTAMP('1970-01-01 08:00:01.001 +0800', 'yyyy-MM-dd HH:mm:ss.SSS X');
三、解决方案
sql
TIMESTAMPADD(HOUR, 8, TO_TIMESTAMP(replace(substring('2023-10-17T03:00:42.506205807',0,23),'T',' ')));
TIMESTAMPADD + TO_TIMESTAMP
(1)TIMESTAMPADD
作用:给时间戳加上任意时间
用法:TIMESTAMPADD(timeintervalunit, interval, timepoint)
sql
eg:
TIMESTAMPADD(HOUR, 8, 1696932862000)
(2)TO_TIMESTAMP
作用:将时间字符串转换成时间戳
用法:TO_TIMESTAMP(string1[, string2])
sql
eg:
TO_TIMESTAMP('1970-01-01 08:00:01.001')