Hive时间函数总结
1:获取当前日期: current_date
select current_date;
2019-07-16
2:日期时间转日期函数:to_date(string timestamp)
select to_date('2017-09-15 11:12:00')
2017-09-15
3:计算两个日期之间的天数: datediff
select datediff('2017-09-15','2017-09-01')
14
4:日期增加和减少: date_add/date_sub(string startdate,int days)
select date_add('2017-09-15',1)
2017-09-16
select date_sub('2017-09-15',1)
2017-09-14
5:计算一年中的第几天
select date_format('2011-12-08 10:03:01', 'D');
342
6:计算一年中的第几周
select weekofyear('2011-12-08 10:03:01');
49
7:计算一月中的第几天
select dayofmonth('2011-12-08 10:03:01');
8
8:计算一周中的第几天
select dayofweek('2011-12-08 10:03:01');
5
9:计算当前日期是周几
select date_format('2011-12-08 10:03:01', 'EEEE');
Thursday
SELECT IF(pmod(datediff('2018-05-20', '1920-01-01') - 3, 7)='0', 7, pmod(datediff('2018-05-20', '1920-01-01') - 3, 7))
SELECT IF(current_date - 3, 7)='0', 7, pmod(current_date - 3, 7))
10,from_unixtime:转化unix时间戳到当前时区的时间格式
select from_unixtime(1323308943,’yyyyMMdd’);
20111208
11,unix_timestamp:获取当前unix时间戳
select unix_timestamp();
1430816254
select unix_timestamp('2015-04-30 13:51:20');
1430373080
12,year:返回日期中的年
select year('2015-04-02 11:32:12');
输出:2015
13,month:返回日期中的月份
select month('2015-12-02 11:32:12');
输出:12
14,day:返回日期中的天
select day('2015-04-13 11:32:12');
输出:13
15,hour:返回日期中的小时
select hour('2015-04-13 11:32:12');
输出:11
16,minute:返回日期中的分钟
select minute('2015-04-13 11:32:12');
输出:32
17,second:返回日期中的秒
select second('2015-04-13 11:32:56');
输出:56
18,from_unixtime+ unix_timestamp Hive中yyyymmdd和yyyy-mm-dd日期之间的切换
思想:先转换成时间戳,再由时间戳转换为对应格式。
select from_unixtime(unix_timestamp('20171205','yyyymmdd'),'yyyy-mm-dd') from dual;
select from_unixtime(unix_timestamp('2017-12-05','yyyy-mm-dd'),'yyyymmdd') from dual;
19,hive返回上个月第一天和最后一天
select trunc(add_months(CURRENT_TIMESTAMP,-1),'MM')
select concat(substr(add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1),1,7),'-01');
select date_sub(trunc(CURRENT_TIMESTAMP,'MM'),1);
20, 两个日期相差多少小时
select (unix_timestamp('2018-05-25 12:03:55') - unix_timestamp('2018-05-25 11:03:55'))/3600
输出:1
21, 两个日期相差多少分钟
select (unix_timestamp('2018-05-25 12:03:55') - unix_timestamp('2018-05-25 11:03:55'))/60
输出:60
22,求一个月的最后一天
select last_day(current_date);
2019-09-30
23,求本周一
select date_sub(next_day(to_date(CURRENT_TIMESTAMP),'MO'),7);
2020-06-01
24,求上周一
select date_sub(next_day(to_date(CURRENT_TIMESTAMP),'MO'),14);
2020-05-25
25,求下周一
select date_sub(next_day(to_date(CURRENT_TIMESTAMP),'MO'),0);
2020-06-08
26,求下下周一
select date_add(next_day(to_date(CURRENT_TIMESTAMP),'MO'),7);
2020-06-15
27,求上月一号
select trunc(add_months(to_date(CURRENT_TIMESTAMP),-1),'MM');
2020-05-01
28,求本月一号
select trunc(to_date(CURRENT_TIMESTAMP),'MM');
2020-06-01
29,求下月一号
select trunc(add_months(to_date(CURRENT_TIMESTAMP),1),'MM');
2020-07-01
30,next_day