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。很疑惑…本篇文章不考虑这个。

二、如何格式化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 转化为 时间戳,然后再把时间戳转化为指定格式的字符串。
      
      


版权声明:本文为weixin_42845682原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。