hive中,如何格式化timestamp?如何将timestamp类型的字段转化为指定格
式。。。
⽂章⽬录
hive中的时间类型有两种:date 和 timestamp。date只存储⽇期,timestamp则存储纳秒级别的时间戳。当需要存储⼩时及更精细的时间的时候,就只能使⽤timestamp了。
然⽽在实践中,发现⼀个问题,存好存,但是在使⽤⽅⾯有⼀些不太好⽤。
⼀、建表及插⼊数据
这⾥图⽅便就测试表了:
create table test(
dt timestamp
)
insert into test values('2020-12-12 13:14:15')
尝试插⼊时间戳⽅式:
insert into test values(1430816254)
这种⽅式插⼊也不报错,执⾏成功了,但是查询的时候,显⽰插⼊的数据为NULL。很疑惑…本篇⽂章不考虑这个。
unix时间戳转换日期格式⼆、如何格式化timestamp
最近有⼀个需求,需要把dt字段格式化成yyyy-MM-dd HH的形式。像刚才插⼊的数据 2020-12-12 13:14:15,应该显⽰为2020-12-12 13,本⾝我以为会有⼀个函数,我指定字段和yyyy-MM-dd HH就好,但是了半天竟然没有这么个函数…
后来我测试了⼀下,有下⾯这么⼏种办法:
1. substr
对,你没看错,这个⽅法可以直接操作timestamp字段。
当你直接查询timestamp类型的字段时,他现实的格式是 年-⽉-⽇时:分:秒毫秒。
⽽你可以默认该字段都是这种格式的字符串,然后使⽤substr⽅法进⾏操作。
substr⽅法如何使⽤请百度。
但是这种⽅法调整格式很难,难不成你截取以后再拼接么…
2. from_unixtime 和 unix_timestamp 组合使⽤
我⼀开始就想到了这两个⽅法,但是遗憾的是,unix_timestamp 最终得到的结果是⼀个时间戳,⽽from_unixtime则是把时间戳转换成指定格式的字符串,这两个⽅法都不能直接对 timestamp 类型的字段进⾏操作。但是这两个⽅法组合⼀下,就可以了。
select from_unixtime(unix_timestamp(dt),'yyyy-MM-dd')from test;
其实就是 先把 timestamp 转化为 时间戳,然后再把时间戳转化为指定格式的字符串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。