Hive sql - 时间函数大全

1. 获取当前时间

1.1 获取yyyy-MM-dd格式的时间

select current_date()
返回类型:date
输出结果:2022-11-20

1.2 获取当前完整格式的时间

select current_timestamp()
返回类型:timestamp
输出结果:2022-11-20 16:47:31.649

2. 获取时间戳

2.1 获取当前时间的时间戳

select unix_timestamp()
返回类型:
输出结果:1669279002

2.2 获取指定时间的时间戳

select unix_timestamp(cast('2022-11-20' as date))
返回类型:
输出结果:1668873600
select unix_timestamp(cast('2022-11-20 10:00:01' as date))
返回类型:
输出结果:1668873600
select unix_timestamp('2022-11-20 10:00:01')
返回类型:
输出结果:1668909601

3. 将时间戳转为格式化的时间

select from_unixtime(unix_timestamp())
返回类型:
输出结果:2022-11-24 16:50:50
select from_unixtime(unix_timestamp(),'yyyy-MM-dd')
返回类型:
输出结果:2022-11-24

4. 将含时分秒的时间转化为yyyy-MM-dd的格式时间

select to_date('2022-11-20 10')
返回类型:
输出结果:2022-11-20
select to_date('2022-11-20 10:10:10')
返回类型:
输出结果:2022-11-20

5. 将时间处理成想要的格式

select date_format('2022-10-11','yyyy-MM')
返回类型:
输出结果:2022-10
select date_format('2022-10-10 10','yyyy')
返回类型:
输出结果:2022
select date_format('2022-10-10 10:10','yyyy-MM-dd HH')
返回类型:
输出结果:2022-10-10 00
select date_format('2022-10-10 10:10:10','yyyy-MM-dd HH')
返回类型:
输出结果:2022-10-10 10
select date_format('2022/10/10','yyyyMMdd')
返回类型:
输出结果:null

6. 获取指定时间的年/季度/月/日/时/分/秒

6.1 获取指定时间的年

select year('2022-11-11')
返回类型: 
输出结果:2022
select year('2022-11-11 10')
返回类型: 
输出结果:2022

6.2 获取指定时间的季度

select quarter('2022-11-11')
返回类型: 
输出结果:4
select quarter('2022-11-11 10')
返回类型: 
输出结果:4

6.3 获取指定时间的月

select month('2022-11-10 10')
返回类型: 
输出结果:11

6.4 获取指定时间的日

select day('2022-11-09 10')
返回类型: 
输出结果:9

6.5 获取指定时间的时

select hour('2022-11-09 07:00:00')
返回类型: 
输出结果:7
select hour('2022-11-09 07:00:00')
返回类型: 
输出结果:0

6.6 获取指定时间的分

select minute('2022-11-09 07:08:00')
返回类型: 
输出结果:8
select minute('2022-11-09 07:08')
返回类型: 
输出结果:0

6.7 获取指定时间的秒

select second('2022-11-09 07:08:06')
返回类型:  
输出结果:6

7. 获取前后n天的时间

7.1 date_add

select date_add('2022-11-20',2)
返回类型:string  
输出结果:2022-11-22
select date_add('2022-11-20',-2)
返回类型:string  
输出结果:2022-11-18

7.2 date_sub

select date_sub('2022-11-20',2)
返回类型:string  
输出结果:2022-11-18
select date_sub('2022-11-20',-2)
返回类型:string  
输出结果:2022-11-22

8. 获取前后n个月的时间

select add_months('2022-11-20 10',2)
返回类型:string   
输出结果:2023-01-20
select add_months('2022-11-20 10',-2)
返回类型:string   
输出结果:2022-09-20
select add_months('2022-11',-2)
返回类型:string   
输出结果:null

9. 获取当前时间是一年中的第几天

select dayofyear('2022-01-01')
返回类型:   
输出结果:null

10. 获取当前时间是一月中的第几天

select dayofmonth('2022-01-01') 
返回类型:    
输出结果:1

11. 获取当前时间是一年中的第几周

select weekofyear('2022-01-01')
返回类型:int    
输出结果:52
select weekofyear('2022-01-07')
返回类型:int    
输出结果:1

12. 获取当月的最后一天

select last_day('2022-11-05')
返回类型:    
输出结果:2022-11-30
select last_day('2022-11-05 10')
返回类型:    
输出结果:2022-11-30

13. 获取下一个星期几

select next_day('2022-11-24','monday')
返回类型:
输出结果:2022-11-28
select next_day('2022-11-24 10','monday')
返回类型:
输出结果:2022-11-28

14. 获取两个时间天数的差值

select datediff('2022-11-24','2022-11-20 10')
返回类型:int
输出结果:4

15. 获取当年/当月第一天

select trunc('2022-11-20','mm')
返回类型:
输出结果:null
select trunc('2022-11-20','MM')
返回类型: 
输出结果:2022-11-01
select trunc('2022-11-20','YY')
返回类型: 
输出结果:2022-01-01

16. 获取本周第一天或最后一天或上周第一天

-- 本周第一天
select date_sub(next_day('2022-11-24','monday'),7)
返回类型: 
输出结果:2022-11-21
-- 本周最后一天
select date_sub(next_day('2022-11-24','monday'),1)
返回类型: 
输出结果:2022-11-27
-- 上周第一天
select date_sub(next_day('2022-11-24','monday'),7*2)
返回类型: 
输出结果:2022-11-14

17. 提取时间中的年/季度/月/日/时/分/秒

select extract(year from '2015-10-15 10:09:08')
返回类型:int 
输出结果:2015
select extract(quarter from '2015-10-15 10:09:08')
返回类型:int 
输出结果:4
select extract(month from '2015-10-15 10:09:08')
返回类型:int 
输出结果:10
select extract(day from '2015-10-15 10:09:08')
返回类型:int 
输出结果:15
select extract(hour from '2015-10-15 10:09:08')
返回类型:int 
输出结果:10
select extract(minute from '2015-10-15 10:09:08')
返回类型:int 
输出结果:9
select extract(second from '2015-10-15 10:09:08')

18. 转换为特定时区的时间

select from_utc_timestamp('2022-03-09 15:21:34','CST')
返回类型:timestamp
输出结果:2022-03-09 09:21:34.0
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值