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')
仅支持下面的格式,忽略大小写
中文 | 2 | 3 | 全称 |
星期一 | MO | Mon | Monday |
星期二 | TU | Tue | Tuesday |
星期三 | WE | Wed | Wednesday |
星期四 | TH | Thu | Thursday |
星期五 | FR | Fri | Friday |
星期六 | SA | Sat | Saturday |
星期天 | SU | Sun | Sunday |
15. 获取当前日期所在的季度
ceil(month(current_date)/3)
lpad(ceil(month(current_date)/3),2,0)