乐趣区

关于hive:Hive日期时间函数总结

这期来讲一下 Hive 日期和工夫函数,因为在一些业务的剖析当中,常常要接触到一些和工夫无关的剖析,例如最近几个月,某项指标的变动状况,那么日期和工夫函数还是须要把握的。
上面这个我是依照 2021-05-27 日期来做的例子:

— 以后日期:

select current_date();
后果:2021-05-27

— 以后工夫:

select current_timestamp();
后果:2021-05-27 15:54:56.052 PRC

select from_unixtime(unix_timestamp(),’yyyy-MM-dd HH:dd:ss’);
后果:2021-05-27 16:27:30

– 以后工夫戳:

select unix_timestamp();
后果:1622102134

– 工夫戳转日期:

select from_unixtime(1622102134,’yyyy-MM-dd HH:dd:ss’);
后果:2021-05-27 15:27:34

— 昨天日期:

select date_sub(from_unixtime(unix_timestamp(),’yyyy-MM-dd’),1);
后果:2021-05-26

— 今天日期:

select date_add(from_unixtime(unix_timestamp(),’yyyy-MM-dd’),1);
后果:2021-05-28

— 前两天日期:

select regexp_replace(to_date(date_sub(from_unixtime(unix_timestamp()),2)),’-‘,”)
后果:2021-05-25

– 两个日期之间差值(差值为天数):

select datediff(‘2021-05-28′,’2021-05-26’);
后果:2

– 字符串转工夫:

select to_date(‘2021-05-01 11:00:12’);
后果:2021-05-01

– 转换日期格局:

select date_format(current_date(),’yyyyMMdd’);
后果:20210527

–utc 工夫转换:

select from_utc_timestamp(current_timestamp(),’PRC’);
后果:2021-05-28 00:52:07.000

– 获取秒:

select second(‘2021-05-27 16:52:07’);
后果:7

– 获取分:

select minute(‘2021-05-27 16:52:07’);
后果:52

– 获取时:

select hour(‘2021-05-27 16:52:07’);
后果:16

– 获取天:

select day(‘2021-05-27 16:52:07’);
后果:27

– 获取周:

select weekofyear(‘2021-05-27 16:52:07’);
后果:21

– 获取月:

select month(‘2021-05-27 16:52:07’);
后果:5

– 获取年月:

select substr(regexp_replace(to_date(from_unixtime(unix_timestamp())),’-‘,”),1,6);
后果:202105

– 获取季度:

select quarter(‘2021-05-27 16:52:07’);
后果:2

– 获取年:

select year(‘2021-05-27 16:52:07’);
后果:2021

– 两个日期相差多少小时:

select (unix_timestamp(‘2021-05-27 12:24:12’) – unix_timestamp(‘2021-05-23 08:01:55’))/3600
后果:100.37

– 上周第一天:

select date_add(next_day(current_timestamp(),’MO’),-7);
后果:2021-05-24

– 上月第一天:

select trunc(add_months(current_timestamp(),-1),’MM’);
后果:2021-04-01

– 上月第一天:

select concat(substr(add_months(from_unixtime(unix_timestamp(),’yyyy-MM-dd’),-1),1,7),’-01′);
后果:2021-04-01

– 上月最初一天:

select date_sub(trunc(current_timestamp(),’MM’),1);
后果:2021-04-30

– 当月第一天:

select trunc(current_timestamp(),’MM’);
后果:2021-05-01

– 当月第一天:

select date_sub(current_date,dayofmonth(current_timestamp())-1);
后果:2021-05-01

– 当月最初一天:

select last_day(current_timestamp());
后果:2021-05-31

– 当月第几天:

select dayofmonth(current_timestamp());
后果:27

– 当年第一天:

select trunc(current_timestamp(),’yy’);
后果:2021-01-01

– 下周第一天:

select next_day(current_timestamp(),’MO’);
后果:2021-05-31

– 下月第一天:

select add_months(current_timestamp(),1)
后果:2021-06-01

– 下月最初一天:

select last_day(add_months(current_timestamp(),1));
后果:2021-06-30

– 上季度第一天:

select add_months(concat(year(CURRENT_DATE),’-‘,substr(concat(‘0′,floor((month(CURRENT_DATE)+2)/3)*3+1),-2),’-01′),-6);
后果:2021-01-01

– 本季度第一天:

select add_months(concat(year(CURRENT_DATE),’-‘,substr(concat(‘0′,floor((month(CURRENT_DATE)+2)/3)*3+1),-2),’-01′),-3);
后果:2021-04-01

select to_date(concat(year(current_timestamp()),’-‘,lpad(ceil(month(current_timestamp())/3)*3-2,2,0),’-01′));
后果:2021-04-01

– 本季度最初一天:

select last_day(to_date(concat(year(current_timestamp()),’-‘,lpad(ceil(month(current_timestamp())/3)*3,2,0),’-01′)));
后果:2021-06-30

– 字符拼接:

select concat(‘2019′,’05’,’11’);
后果:20190511

– 字符截取:

select substr(‘2019-05-01’,0,7);
后果:2019-05

– 英文日期转换:

select from_unixtime((unix_timestamp(‘201509′,’yyyyMM’)),’MMM-YY’);
Sep-15

总结:unix_timestamp 可能算出工夫戳,unix 工夫戳是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所通过的秒数,不思考闰秒。from_unixtime 可能进行格局转换,所以咱们须要把握根本的工夫、日期的格局。年、季度、月、日、时、分、秒等等这些根本的函数就简略很多。日期差 datediff 应该宽泛。其余的小时、分钟等等就用工夫戳相减而后除以相应的值就行。date_add 和 date_sub,日期的相加减,trunc 截取函数较为有用。last_day、next_day、add_months 对于判断月初、月末、周初、周末这样的十分有用。最初就是能够通过字符串的截取 substr 和组合 concat 失去咱们想要的日期、工夫。

关键词:大数据培训

退出移动版