一、函数:datediff(string enddate, string startdate) 求开始和结束时间相差的天数
二、举例1:获取2021-08-01为今年的第几天
hive > select datediff('2021-08-01','2020-12-31');
OK
_c0
213
Time taken: 0.767 seconds, Fetched: 1 row(s)
三、举例2:获取字段内的时间是当年的第几天
hive > select ds,datediff(ds, concat(year(ds)-1,'-12-31')) from dual ;
OK
ds _c1
2020-09-28 272
2020-10-28 302
2020-11-05 310
2020-11-12 317
2020-12-11 346
2020-12-31 366
2021-01-01 1
2021-02-01 32
2021-02-04 35
2021-02-06 37
Time taken: 0.968 seconds, Fetched: 10 row(s)
四、其他相关时间函数(转载:hive时间函数应用获取当前时间 - 知乎)
1. 获取当前时间: CURRENT_DATE
SELECT CURRENT_DATE;
2. 获取当月第一天时间:date_sub
select date_sub (current_date,dayofmonth(current_date)-1);
3. 获取下个月第一天时间:add_months
select add_months(date_sub(current_date,dayofmonth(current_date)-1),1);
4. 获取当月第几天:dayofmonth
select dayofmonth(current_date);
5. 获取当前日期所在月月末日期:last_day
select last_day(current_date);
6. 获取当前日期本周一:date_sub
select date_sub(next_day(CURRENT_DATE,'MO'),7);
7. 获取当前日期上周一:date_sub
select date_sub(next_day(CURRENT_DATE,'MO'),14);
8. 获取当前日期上周日:
select date_sub(next_day(CURRENT_DATE,'MO'),8);
9. 获取当前日期本周二:(获取其他周几调整最后参数)
select date_sub(next_day(CURRENT_DATE,'MO'),6);
10. 获取当前日期上周二:(获取其他周几调整最后参数)
select date_sub(next_day(CURRENT_DATE,'MO'),13) ;
11. 获取当前时间的前/后几个月时间:(调整最后参数)
select add_months(CURRENT_DATE,-3);
12. 开始结束时间相差天数
datediff(string enddate, string startdate)
13. 从开始时间startdate加上days
date_add(string startdate, int days)
14. 从开始时间startdate减去days
date_sub(string startdate, int days)
15. 获取上季度初日期=(quarter方法hive不支持需通过其他方式)
select add_months(concat(year(CURRENT_DATE),'-',substr(concat('0',floor((month(CURRENT_DATE)+2)/3)*3+1),-2),'-01'),-6);
16. 获取本季度初日期=(quarter方法hive不支持需通过其他方式)
select add_months(concat(year(CURRENT_DATE),'-',substr(concat('0',floor((month(CURRENT_DATE)+2)/3)*3+1),-2),'-01'),-3);
17.取上个季度同今天时间
select add_months(CURRENT_DATE,-3)
18.去年本季度开始时间
select add_months(concat(year(CURRENT_DATE),'-',substr(concat('0',floor((month(CURRENT_DATE)+2)/3)*3+1),-2),'-01'),-15);
19.去年本季度结束时间
select add_months(CURRENT_DATE,-12);