由于时间在hive里一般都是按照str存储的,有多重格式,比如时间戳格式或者标准的时间格式,有很多函数可以用于时间格式的换算。
1.unix时间格式转换
1.1 一些函数
- current_timestamp()
获取当前的日期,是标准格式的,'yyyyMMddHH:mm:ss' - unix_timestamp()
获取当前的unix时间格式,这个函数没有参数。
select unix_timestamp()
unix_timestamp()可以把日期转换为unix格式,标准用法为 unix_timestamp(string date,string pattern)
select unix_timestamp('20111207 13:01:03','yyyyMMddHH:mm:ss')
输出:1323234063
- from_unixtime()
将unix时间转换为日期格式,标准用法from_unixtime(bigint unixtime[, stringformat])
其中,stringformat可以省略,默认为'yyyy-MM-dd HH:mm:ss'。
select from_unixtime(1323234063)
输出:2011-12-07 13:01:03
1.2 unix时间戳和标准时间的换算方法
unix字符串相减得到的是秒,要进行转化的话:
- 转化为分钟,除以60;
- 转化为小时,除以3600;
- 转化为天,除以24*3600.
hive的默认时间戳是10位(秒级别)的,也就是说两个时间戳相减得到的是秒。
值得注意的是,有些时候有的时间戳是13位的(毫秒级别),这个时候还要除以1000。
2.日期操作函数
- current_date
获取当前的日期,是标准的日期格式,如'2019-11-24'。 - date_sub()
日期相减函数,语法为date_sub (string startdate,int days) ,其中第一个参数为日期,第二个参数为整数,表示减掉的天数。
hive> select date_sub('2019-11-25',1);
OK
2019-11-24
- date_add()
日期增加函数,语法为date_add(string startdate, int days) ,其中第一个参数为日期,第二个参数为整数,表示增加的天数。
select date_add('2019-11-25',1);
OK
2019-11-26
- datediff()
日期相减函数,得到两个日期之间的间隔,语法为datediff(string enddate,string startdate) ,返回值是int,表示间隔的日期。
注意这个函数没有下划线。
select datediff('2019-11-25','2019-11-24');
返回值:1
3.日期截取函数
- to_date()
将一些非标准的日期,比如'2019-11-25 17:47:08.971',to_date()的语法为to_date(string timestamp)。
select to_date('2019-11-25 17:47:08.971')
- 输出:2019-11-25
- year()
求日期所在的年份,语法为year(string timestamp)
select year('2019-11-25 17:47:08.971')
- 输出:2019
- month()
求日期所在的月份,语法为month(string timestamp)
select month('2019-11-25 17:47:08.971')
-输出:11
- day()
求日期所在的天,语法为day(string timestamp)
select day('2019-11-25 17:47:08.971')
-输出:25
- hour、minute、second
跟前几个一样,分别求时分秒,这个就不举例子了。 - weekofday
返回时一年中的第几周,语法为weekofyear(string timestamp)
select weekofyear('2019-11-25 17:47:08.971')
-输出:48
网友评论