current_date
Hive 中可识别的日期格式有两种:
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
例如:2020-09-21
在Hive命令行中,我们可以通过current_date查看当前日期:
select current_date;
current_date拓展
只求当前年:
select year(current_date);
示例:
只求当前月:
select month(current_date);
求当前是一年的第几周:
select weekofyear(current_date);
求当月第几天(几号):
select day(current_date);
datediff和pmod
Hive中还提供了供我们计算时间间差值的函数:datediff。
格式:
datediff(‘date1’,‘date2’)
计算过程是date1-date2;
例如:
select datediff(current_date,'2020-09-01');
pmod用作两数之间取余,例如:
select pmod(8,4);
取余为0:
借助这一函数我们可以算出当前为周几。一周有7天,所以我们把7当初除数,天数为除数。在计算前,先已一个知道的日期为标准,例如:
2020-01-01号是星期三,那么我们就可以先算出当前日期与2020-01-01号的差值,然后减去所知周几再减1,除以7就可以得到当前日期:
select pmod(datediff(current_date,'2020-01-01')-4,7);
例题
为了帮助大家更好的理解,下面例举一些例题帮助大家巩固一下。
01 孙悟空 1990-01-01
02 猪八戒 1990-12-21
03 沙悟净 1990-05-20
04 唐三藏 1990-08-06
05 卡卡罗特 1991-12-01
06 贝吉塔 1992-03-01
07 琦玉 1989-09-26
08 杰诺斯 1990-01-20
09 鸣人 1990-10-10
10 佐助 1991-07-23
11 路飞 1995-05-05
1、查出每个人的年龄,如果当前月日小于出书年月日,则年龄减一
SELECT *,(CASE WHEN MONTH(CURRENT_DATE)<MONTH(birth) THEN YEAR(CURRENT_DATE)-1-YEAR(birth)
WHEN MONTH(CURRENT_DATE)>MONTH(birth) THEN YEAR(CURRENT_DATE)-YEAR(birth)
ELSE IF(DAY(CURRENT_DATE)>=DAY(birth),YEAR(CURRENT_DATE)-YEAR(birth),YEAR(CURRENT_DATE)-1-YEAR(birth))END)age FROM stu;
2、查询本月过生日的同学:
select * from stu where month(birth)=month(current_date);
3、查询下个月过生日的同学:
select * from stu where month(birth)=month(current_date)+1;
4、查询本周过生日的同学:
select * from stu where weekofyear(birth)=weekofyear(current_date);
本篇博文就到这里了,如果还有其他的计算方法或者本篇遗漏的知识欢迎大家到评论区进行补充。