Hive--日期时间操作

208 阅读2分钟

1. 获取当前日期

current_date

在这里插入图片描述

2. 获取当前时间

current_timestamp

在这里插入图片描述

3. 按格式获取当前日期时间

from_unixtime(current_timestamp(),'yyyy-MM-dd HH:mm:ss') 
from_unixtime(current_timestamp(),'yyyy-MM-dd  HH') 
from_unixtime(current_timestamp(),'yyyyMMdd') 

在这里插入图片描述 在这里插入图片描述 hive官方不推荐用了,可以用current_timestamp然后用substr()截取

substr(current_timestamp,1,10)
substr(current_timestamp,1,19)

在这里插入图片描述

4. 前后几个月

add_months(current_timestamp, -6)
add_months(current_timestamp, 6)

add_months(current_date, -6)
add_months(current_date, 6)

add_months('2020-12-01', -6)
add_months('2020-12-01', 6)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

5. 前后几天

date_add(current_date, 6)
date_sub(current_date, 6)

date_add(current_date, -6)
date_sub(current_date, -6)

在这里插入图片描述 在这里插入图片描述

6. 计算天数差

datediff(start_time,end_time)

在这里插入图片描述 datediff 在处理date格式 会有坑,会少一天 在这里插入图片描述

7. 计算时间差

(unix_timestamp(start_time)-unix_timestamp(end_time))/3600

在这里插入图片描述

8. 获取日期中的年月日、时分秒以及当前的周数

select year(current_timestamp);   ----返回日期中的年
select month(current_timestamp);  ----返回日期中的月
select day(current_timestamp);    ----返回日期中的日
select hour(current_timestamp);   ----返回日期中的时
select minute(current_timestamp); ----返回日期中的分
select second(current_timestamp); ----返回日期中的秒
select weekofyear(current_timestamp); ----返回日期在当前的周数

在这里插入图片描述

9. 时间戳转为日期

输入的时间戳需要是整数,不能是字符串

select from_unixtime(1606989058,'yyyy-MM-dd HH:mm:ss') ; --秒级
select from_unixtime( cast(1606989066019/1000 as int),'yyyy-MM-dd HH:mm:ss') ;  --毫秒级

在这里插入图片描述

10. 日期转为时间戳

必须是严格的‘yyyyMMdd HH:mm:ss’格式,转换后的是秒级的,不是毫秒级的

select unix_timestamp('2020-12-03 17:51:06');

在这里插入图片描述

11. 根据日期获取星期几

pmod(datediff(current_timestamp, '1920-01-01') - 3, 7) 

输出的结果为0-6的数,分别表示 日,一,二 ... 六。 在这里插入图片描述

12. 当月第一天和当月最后一天

trunc(current_timestamp,'MM')   -- 当月第一天                                                           
last_day(current_timestamp)    -- 当月最后一天

在这里插入图片描述

13. 当年第一天和当年最后一天

trunc(current_timestamp,'YY')                      -- 当年第一天                                                           
last_day(add_months(trunc(current_date,'YY'),11))  -- 当年最后一天

在这里插入图片描述

14. 当前星期的下个星期几

next_day(current_timestamp, 'TU')

仅支持下面的格式,忽略大小写

中文23全称
星期一MOMonMonday
星期二TUTueTuesday
星期三WEWedWednesday
星期四THThuThursday
星期五FRFriFriday
星期六SASatSaturday
星期天SUSunSunday

在这里插入图片描述

15. 获取当前日期所在的季度

ceil(month(current_date)/3)
lpad(ceil(month(current_date)/3),2,0)

在这里插入图片描述