0


hive将时间字符串转换为timestamp的几种写法

写法一

select from_utc_timestamp(from_unixtime(unix_timestamp('2023-8-7 9:38:10 UTC+08:00','yyyy-MM-dd HH:mm:ss')),'UTC');

写法二

select cast(unix_timestamp('2023-8-7 9:38:10 UTC+08:00','yyyy-MM-dd HH:mm:ss')astimestamp);

写法三

select cast(trim(split(upper('2023-10-31 4:46:40 UTC+0800'), 'UTC')[0])astimestamp);

这种方式我觉得过于复杂了。

使用到的函数

unix_timestamp

  • 函数签名
bigint unix_timestamp(string datetime, string format)
  • 函数返回值 bigint类型的时间戳整数
  • 函数入参 第一个参数是string类型的时间,比如’2024-01-10 20:44:00’。 第二个参数是string类型的时间格式化的格式,比如’yyyy-MM-dd HH:mm:ss’。
  • 函数使用
-- 将给定时间字符串转换为指定格式的时间戳数字
select unix_timestamp('2023-12-4 4:45:12 UTC+08:00', 'yyyy-MM-dd HH:mm:ss');
-- 输出为1701619200
-- 获取当前时间戳
select unix_timestamp();
  • 注意点 方法的返回值在spark中可以直接强转为timestamp。 在hive中不能直接转为timestamp,强转会转为很奇怪的时间。 如果要在hive中将此函数返回值转为timestamp,则需要使用cast函数转为timestamp。

from_unixtime

  • 函数签名
string from_unixtime(bigint time, string fromat)
  • 函数返回值
  • 函数参数 bigint类型的时间戳。 string类型的格式,用于指定函数返回值的格式,可以省略,如果省略,则默认为’yyyy-MM-dd HH:mm:ss’
  • 函数使用
select from_unixtime(1701619200, 'yyyy-MM-dd HH:mm:ss');
-- 省略format
select from_unixtime(1701619200);

测试

可以使用以下字符串作为输入进行测试。
以下各市的字符串经过在beeline客户端进行测试,均能转换为timestamp,且时间精度不会丢失

2023-8-3115:40:56-- 能够将带有UTC格式的字符串转换为时间戳,然后再转换为timestamp。-- 但是会有8个小时的误差,上述的方法貌似是直接把UTC字符串给去掉了。                                                                                                                                                          2023-12-44:45:12 UTC+08002023-10-173:38:1 UTC+08002023-5-313:7:02024-01-1020:44:00.048

参考

unix_timestamp 时间戳函数用法(hive)


本文转载自: https://blog.csdn.net/qq_26432153/article/details/138462969
版权归原作者 全球潮人 所有, 如有侵权,请联系我们删除。

“hive将时间字符串转换为timestamp的几种写法”的评论:

还没有评论