hive中如何把13位转化为时间_【hive常⽤函数⼀】⽇期函数使⽤hive进⾏数据处理的过程种,遇到不少问题,总结之前的⼀些开发经验,把之前的⼀些处理技巧mark⼀下:
使⽤通⽤的哑表dual作为测试表⽤。
1、时间戳转换
⽇期格式转换时间戳只能精确到秒(即长度只有10位,⽽不是13位)
unix_timestamp(date,dateformat)
unix_timestamp()不⼊参,函数可以直接获取当前的时间戳
select unix_timestamp() as time_stamp,unix_timestamp('2018-09-26 9:13:26','yyyy-MM-ddHH:mm:ss') as time_stamp1
from dual;
time_stamp time_stamp1
1538054001 1537924406
时间戳转换成⽇期格式,必须长度为10
from_unixtime(timestamp,dateformat)
select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') asdate_time,from_unixtime(1537924406,'yyyy-MM-dd') as date_time1 from dual;
date_time date_time1
2018-09-27 21:16:13 2018-09-26
如果是毫秒级别时间戳13位,可以这么转换cast(timestamp/1000 as bigint)
2、⽇期格式化
把字符串或者⽇期转成指定格式的⽇期
date_format(string/date,dateformate)
unix时间戳转换日期格式select date_format('2018-09-12','yyyy-MM-dd HH:mm:ss') as date_time,date_format('2018-09-12','yyyyMMdd') as
date_time1 from dual;
date_time date_time1
2018-09-12 00:00:00 20180912
还有⼀个to_date(date)函数 返回 yyyy-MM-dd⽇期格式
3、⽇期加减/⽉份加减(位移)
对⽇期进⾏加减法,date_add函数参数n是正数往后推n天,如果是负数往前推n天,date_sub函数相反
对⽉份进⾏加减,add_months 函数参数m是正数往后推m个⽉,如果是负数往前推m个⽉
date_add(date,n)
date_sub(date,n)
select date_add('2018-09-27',2) as date1,date_add('2018-09-27',-2) as date2 from dual;
date1 date2
2018-09-29 2018-09-25
add_months(date,m)
select add_months('2018-09-27',1) as month1,add_months('2018-09-27',-1) as month2 from dual;
month1 month2
2018-10-27 2018-08-27
4、⽇期差/⽉份差
⽇期差计算两个⽇期之间相差多少天,前⾯的⽇期减去后⾯的⽇期
⽉份差计算前⾯的⽇期减去后⾯的⽇期计算⽉份差,这个结果是按照天数占⽉分的⽐值计算得到的,是⼀个⼩数,可以⾃⼰取整
datediff(date,date1)
select datediff('2018-09-22','2018-08-02') as day_diff,datediff('2018-08-02','2018-09-22') as day_diff1 from dual;
day_diff day_diff1
51 -51
months_between(date,date1)
select months_between('2018-09-22','2018-08-02') as mon_diff,round(months_between('2018-09-22','2018-08-02')) as mon_diff1 from dual;
mon_diff mon_diff1
1.64516129
2.0
5、获取⽉末、⽉初、年初、当前⽇期下个星期X的⽇期
获取⽉末最后⼀天
last_day(date)
select last_day('2018-09-30') as date_time,last_day('2018-09-27 21:16:13') as date_time1 from dual;
date_time date_time1
2018-09-30 2018-09-30
获取⽉初、年初
trunc(date,format) format:MONTH/MON/MM, YEAR/YYYY/YY
select trunc('2018-09-27','YY') as date_time,trunc('2018-09-27 21:16:13','MM') as date_time1 from dual;
date_time date_time1
2018-01-01 2018-09-01
当前⽇期下个星期X的⽇期
next_day(date,formate) format:英⽂星期⼏的缩写或者全拼
select next_day('2018-09-27','TH') as date_time,next_day('2018-09-27 21:16:13','TU') as date_time1 from dual;
date_time date_time1
2018-10-04 2018-10-02
⽬前常⽤的⼀些⽇期函数⼤概就是如此,还有⼀些简单的year()、month()、day()等等就不⼀⼀列了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论