hive sql 时间戳转换与时间的各种转换

 

目录

from_unixtimefrom_unixtime

日期转小时函数hour与年月日分秒


 

from_unixtimefrom_unixtime

hive sql 中时间戳转换函数: 由bigint类型的值转换为指定时间戳格式;   from_unixtime()

from_unixtimefrom_unixtime(bigint unixtime[, string format])

返回值类型:string

功能: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式

示例:

hive (temp)> select from_unixtime(1323308943,'yyyyMMdd') from test;
20111208
hive (temp)> select from_unixtime(1323308943,'yyyy-MM-dd') from test;
2011-12-08
hive (temp)>select  from_unixtime(1441565203,'yyyy/MM/dd HH:mm:ss') from test;
2015/09/07 02:46:43

具体的时间格式,可以调整第二个参数来指定。
 

相关示例:

info对应的字段值为如:48330a9a94d73db188c78ae6bdc58cbe|0|5|0|11|cxvideo_relate|1605655303|1|516||0|OvPMS|0|92201|1605655303076e5630d435593||a|2|0|comos%3Aiznctke14900 

要拿到时间戳并转换为小时从经过group by操作的表中抽取出来。

分析: 先split分割值,拿到时间戳1605655303 ,然后转换为bigint后再转换为hour函数需要的时间格式的形式,再利用Hour函数读取其中的小时出来。具体代码形如: 

max(hour(from_unixtime(cast(split(info,'\\\|')[6]  as BIGINT),'yyyy-MM-dd HH:mm:ss'))) as hour

注: hive中的split 函数用于分割字符串

日期转小时函数hour与年月日分秒

hour(string date)  

返回日期中的小时,int类型的值

例子

hive (temp)> select hour('2016-12-08 10:03:01') from test;
10

类似的有: 日期转年函数: year(),转月,month(), 转天day() ,转分钟 month()  ,转秒 second() ,转周函数  weekofyear() (此为返回当前日期处于一年中的第多少周)。

其他的有

date_sub date_sub(string startdate, int days) string 返回开始日期startdate减少days天后的日期
date_add date_add(string startdate, int days) string

返回开始日期startdate增加days天后的日期

datediff datediff(string enddate, string startdate) int 返回结束日期减去开始日期的天数

 示例

hive (temp)> select date_sub('2016-12-08',10) from dual;
2016-11-28

#当前日期为2016-08-25,在此基础上减7天
hive (temp)> select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) from dual;
2016-08-18


hive (temp)> select date_add('2016-12-08',10) from dual;
2016-12-18

#当前日期为2016-08-25,在此基础上加7天
hive (temp)> select date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) from dual;
2016-09-01



hive (temp)> select datediff('2016-12-08','2016-12-02') from dual;
6

此为: 

指定格式日期转UNIX时间戳函数为:unix_timestamp.

unix_timestamp(string date, string pattern)  ,返回bigint类型的值,转换格式为"yyyyMMdd HH:mm:ss"的日期到UNIX时间戳。转化失败,则返回0

hive (temp)> select unix_timestamp('20160825 13:02:03','yyyyMMdd HH:mm:ss') from dual;
1472101323

日期时间转日期函数  : to_date

to_date(string timestamp) string 返回日期时间字段中的日期部分
hive (temp)> select to_date('2016-12-08 10:03:01') from dual;
2016-12-08

参考与鸣谢:https://www.jianshu.com/p/e30395941f9c

 

 

你可能感兴趣的:(hive,时间戳,hive中时间转换)