hive常见时间函数

1.时间戳和日期相互转换函数

具体执行结果在后面备注标注出来。主要为时间戳转换为日期函数,和将日期转换为时间戳函数

sql 复制代码
-- 1.时间戳转化为日期函数
-- from_unixtime(bigint unixtime[, string format]) 其中第一个参数必须为bigint类型
select from_unixtime(1661084482)		-- 2022-08-21 20:21:22  
select from_unixtime(1661084482, 'yyyy-MM-dd')  -- 2022-08-21  
select from_unixtime(1661084482, 'yyyyMMdd') 	-- 20220821
select from_unixtime(1661084482,'yyyy-MM-dd HH:mm:ss')		-- 2022-08-21 20:21:22  

-- 2.将日期转换为时间戳
select unix_timestamp('2022-08-21 20:21:22')		-- 1661084482  
select unix_timestamp('20220821','yyyyMMdd')	-- 1661011200
select unix_timestamp('2022-08-21', 'yyyy-MM-dd')	-- 1661011200

2.获取当前天的相关函数

获取当天时间的三种方式,注意格式,其中current_timestamp返回的时间为UTC时间。

sql 复制代码
-- 返回当天三种方式,格式有一定的不同
select current_date 	-- 2023-06-14
select current_timestamp 	-- 返回时分秒 2023-06-14 07:56:14.28
select from_unixtime(unix_timestamp()) 		-- 2023-06-14 15:56:14

3.日期格式化函数

日期格式化函数,需要什么格式,后面写什么格式的日期字符串描述,to_date仅有一种格式返回结果

sql 复制代码
-- 需要什么格式,后面写什么格式的日期字符串描述
select date_format('2022-08-21 20:21:22', 'yyyy-MM-dd')	-- 2022-08-21  
select date_format('2022-08-21 20:21:22', 'yyyyMMdd')		-- 20220821
select date_format('2022-08-21', 'yyyy-MM-dd HH:mm:ss') -- 2022-08-21 00:00:00

-- 获取时间日期的日期部分
select to_date('2022-08-21 20:21:22')		-- 2022-08-21

4.获取年、月、日、天、小时、分钟、秒、周数、星期几、季节函数

hive提供了灵活获取年、月、日、天、小时、分钟、秒、周数、星期几、季节的函数,最后面还提供了一个通过数学函数转换获取季度的逻辑,可以看出其实部分函数如果版本不支持,我们可以通过其他方式曲线获取。当然,不提倡,可读性差

5.日期和月份的加减相关函数

获取日期和月份的加减操作,灵活处理日期和月份增加减少,日期月份之间互相求差值。

sql 复制代码
-- 日期增加日
select date_add('2022-08-21',10) -- 增加日	2022-08-31
-- 日期减少日
select date_sub('2022-08-21',10) -- 减少日	 2022-08-11
-- 月增加
select add_months('2022-08-21',2) -- 增加月 	2022-10-21
-- 月减少
select add_months('2022-08-21',-1) -- 减少月	2022-07-21

-- 两个日期相减函数
select datediff('2022-08-23', '2022-08-21')	-- 2
-- 两个月份相减
select months_between('2022-08-21', '2022-07-25')	-- 0.871

6.获取一些指定特殊日期的函数

主要是获取指定日期的月初(月末)、年初(年末)日期和获取指定日期的下个星期几的日期

sql 复制代码
-- 获取指定日期的月初(月末)、年初(年末)日期
select last_day('2023-06-13')  -- 月末	2023-06-30
select trunc('2023-06-13', 'MM')  -- 月初	2023-06-01
select trunc('2023-06-13', 'YY')  -- 年初	2023-01-01
select date_sub(add_months(trunc('2023-06-13', 'YY'),12),1) -- 年末	2023-12-31

-- 获取指定日期的下个星期几的日期
select next_day('2023-06-13', 'MO')    -- 2023-06-19
select next_day('2023-06-13', 'TU')    -- 2023-06-20
select next_day('2023-06-13', 'WE')    -- 2023-06-14
select next_day('2023-06-13', 'TH')    -- 2023-06-15
select next_day('2023-06-13', 'FR')    -- 2023-06-16
select next_day('2023-06-13', 'SA')    -- 2023-06-17
select next_day('2023-06-13', 'SU')    -- 2023-06-18

7.时区转换函数操作

时区转换函数有很多需要注意的点,其也可以联合使用,简单说一下时区,UTC是世界标准时间。

东一区 GMT+1,东八区GMT+8以此类推,西一区GMT-1,西七区GMT-7以此类推。

时间戳没有时区属性,同一时刻时间戳一致。

sql 复制代码
-- 将utc时间转换为东八区时间。输入为utc时间字符串,结果为东八区时间字符串
select from_utc_timestamp('2023-06-14 15:56:14','GMT+8')		-- 2023-06-14 23:56:14

-- 将utc时间戳转换为东八区时间,输入为utc时间戳,结果为东八区时间字符串,时间戳没有时区属性,同一时刻时间戳一致
select from_utc_timestamp(cast(1686729374000 as bigint),'GMT+8')		-- 2023-06-14 15:56:14
-- 将指定时区时间转换成utc时间
select to_utc_timestamp('2023-06-14 15:56:14','GMT+8')		-- 2023-06-14 07:56:14
-- 将指定时区时间的时间戳转换成utc时间(这种使用方式不常见,是错误的,只是在某些时刻进行数据转换用,不建议使用)
select to_utc_timestamp(cast(1686729374000 as bigint),'GMT+8')	-- 2023-06-13 23:56:14
-- 正确的转换时间戳为utc时间的方式
select to_utc_timestamp(cast(1686729374000 as bigint),'UTC')

详情:https://www.cnblogs.com/lubians/p/17480959.html

相关推荐
lzhlizihang1 小时前
【Hive sql 面试题】求出各类型专利top 10申请人,以及对应的专利申请数(难)
大数据·hive·sql·面试题
Hsu_kk1 小时前
Hive 查询各类型专利 Top 10 申请人及对应的专利申请数
数据仓库·hive·hadoop
静听山水1 小时前
Hive 的数据存储单元结构
hive
大数据编程之光1 小时前
Hive 查询各类型专利 top10 申请人及专利申请数
大数据·数据仓库·hive·hadoop
杰克逊的日记1 小时前
Hive详解
数据仓库·hive·hadoop
上辈子杀猪这辈子学IT1 小时前
【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作
linux·hadoop·zookeeper·centos·debian
Acrelhuang3 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
消失在人海中3 小时前
数据仓库之 Atlas 血缘分析:揭示数据流奥秘
数据仓库
Hsu_kk3 小时前
Hive 查询用户连续三天登录的所有记录
数据仓库·hive·hadoop
kakwooi7 小时前
Hadoop---MapReduce(3)
大数据·hadoop·mapreduce