前言
面试官:假如让你开发一个日期维度表,你会用到哪些日期相关的函数呢?
我:想一下啊。。。
常用日期函数
1. to_date:抽取日期部分
-- 抽取日期部分 select to_date('2022-04-08 20:18:41'); # 2022-04-08
2. unix_timestamp:返回当前或者指定时间的时间戳
-- 获取当前时间戳 select unix_timestamp(); # 1682348981 -- 获取某个具体时间的时间戳 select unix_timestamp("2020-08-28","yyyy-MM-dd"); # 1598544000
3. from_unixtime:将时间戳转为日期格式
select from_unixtime(1649419690); # 2022-04-08 20:08:10
4. current_date: 当前日期
select CURRENT_DATE; # 2023-04-24
5. current_timestamp: 当前日期+时间
select CURRENT_TIMESTAMP; # 2023-04-24 23:20:32.282
6. year:获取年
select year('2022-04-08 20:18:41'); # 2022
7. month:获取月
select month('2022-04-08 20:18:41'); # 4
8. day:获取日
select day('2022-04-08 20:18:41'); # 8
9. hour:获取时
select hour('2022-04-08 20:18:41'); # 20
10. minute:获取分
select minute('2022-04-08 20:18:41'); # 18
11. second:获取秒
select second('2022-04-08 20:18:41'); # 41
12. weekofyear:指定时间是一年中的第几周
select weekofyear('2022-04-08 20:18:41'); # 14
13. dayofmonth:指定时间是一个月中的第几天
select dayofmonth('2022-04-08 20:18:41'); # 8
14. add_months:日期加减月
select add_months('2022-04-08',3); # 2022-07-08 select add_months('2022-04-08',-3); # 2022-01-08
15. datediff:两个日期相差的天数(前 - 后)
select DATEDIFF('2022-04-18','2022-04-08'); # 10
16. date_add: 日期加天数
select date_add('2022-04-18',3); # 2022-04-21
17. date_sub: 日期减天数
select date_sub('2022-04-18',3); # 2022-04-15
注意:
date_add('2022-04-18',3) = date_sub('2022-04-18',-3)
date_add('2022-04-18',-3) = date_sub('2022-04-18',3)
18. last_day:日期的当月的最后一天
select LAST_DAY('2022-04-18'); # 2022-04-30
19. date_format:格式化日期
select DATE_FORMAT('2022-04-08 20:18:41','yyyy/MM/dd HH:hh:ss'); # 2022/04/08 20:18:41
案例
案例1:查询指定日期是周几
解析:先选一个基准日期1970-10-01(周四),指定日期-基准日期 + 4 得到值,再对7进行模运算,得到0-6表示是星期天-星期六。
# 假如指定日期为2023-04-24 case when pmod(datediff('2023-04-24','1970-10-01')+4,7) = 0 then 7 else pmod(datediff('2023-04-24','1970-10-01')+4,7) end as day_week
案例2:查询指定日期是当月的第几周
解析:先查询出指定日期的在当年的周数 - 指定日期当月的月初日期在当年的周数 + 1
# 假如指定日期为2023-04-24 weekofyear('2023-04-24') - weekofyear('2023-04-01') + 1
总结
今天分享了Hive 中常用的日期函数的用法,在日常开发中,避免不了要和日期函数打交道,因此总结出来分享给别人,也方便自己以后忘记时再次拿出来进行复习!