hive中两种日期格式的转换

在解析埋点数据时会遇到两种不同的日期格式:yyyymmdd和yyyy-mm-dd,此类型之间的转换主要有两种思路:

第一种方法:from_unixtime+unix_timestamp

--20180905转成2018-09-05
select from_unixtime(unix_timestamp('20180905','yyyymmdd'),'yyyy-mm-dd')
from dw.ceshi_data
--结果如下:
2018-09-05

--2018-09-05转成20180905
select from_unixtime(unix_timestamp('2018-09-05','yyyy-mm-dd'),'yyyymmdd')
from dw.ceshi_data
--结果如下:
20180905

第二种方法:substr + concat

--20180905转成2018-09-05 
select concat(substr('20180905',1,4),'-',substr('20180905',5,2),'-',substr('20180905',7,2)) from dw.ceshi_data
结果如下:
2018-09-05 

--2018-09-05转成20180905
select concat(substr('2018-09-05',1,4),substr('2018-09-05',6,2),substr('2018-09-05',9,2)) from dw.ceshi_data
结果如下:
20180905

下面主要讲解from_unixtime和unix_timestamp两种函数:

from_unixtime:时间戳转日期函数

用法:from_unixtime(bigint unixtime[, stringformat])

返回值: string

说明: 转化时间戳到当前时区的时间格式

select from_unixtime(1423306743,'yyyyMMdd') 
  from dw.ceshi_data;
结果如下:
20150207

unix_timestamp:日期转时间戳函数

用法:unix_timestamp(string date)

返回值:   bigint

说明: 转换格式为“yyyy-MM-dd HH:mm:ss“的日期到UNIX时间戳。如果转化失败,则返回0。

select unix_timestamp('2018-09-05 12:01:03') 
  from dw.ceshi_data;
结果如下:
1536120063

--获取当前日期的时间戳:
select unix_timestamp() 
  from dw.ceshi_data;
结果如下:
1536126324

 

你可能感兴趣的:(hive)