这里整理一下Hive常见的时间函数和日期函数和用法,作为平时数据处理过程的一个检索和记录。

平时在数据处理过程中,如果不经常使用时间函数,一时间遇到一些时间上的处理,难免会想不起来。

hive本身提供的时间函数已经很丰富了,基本上能满足我们所有的需求,一些特殊需求也可以通过增加一些数学逻辑实现出来。

接下来看一下类别的日期和时间函数的使用方式。

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

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

-- 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时间。

-- 返回当天三种方式,格式有一定的不同
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仅有一种格式返回结果

-- 需要什么格式,后面写什么格式的日期字符串描述
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提供了灵活获取年、月、日、天、小时、分钟、秒、周数、星期几、季节的函数,最后面还提供了一个通过数学函数转换获取季度的逻辑,可以看出其实部分函数如果版本不支持,我们可以通过其他方式曲线获取。当然,不提倡,可读性差。

-- 获取年
select year('2022-08-21 20:21:22') -- 2022
-- 获取月
select month('2022-08-21 20:21:22') -- 8
-- 获取当前天
select day('2022-08-21 20:21:22') -- 21
-- 每月第几天,同day()
select dayofmonth('2022-08-21 20:21:22') -- 21
-- 获取当前小时
select hour('2022-08-21 20:21:22') -- 20
-- 获取当前分钟
select minute('2022-08-21 20:21:22') -- 21
-- 获取当前秒
select second('2022-08-21 20:21:22') -- 22
-- 活跃当前日期是本年第几周
select weekofyear('2022-08-21 20:21:22') -- 31
-- 获取当前天是本周第几天,计算日历是从星期天为本周第一天开始计算。如果想要计算星期1为第一天,可以在当前天加1天再去计算。
select dayofweek('2022-08-21 20:21:22') -- 1
-- 获取当前日期是第几季度
select quarter('2022-08-21 20:21:22') -- 3 -- 如果有hive因版本不支持部分函数,可以通过数学转换计算,例如当前是第几季度。
select ceil(month('2022-08-21 20:21:22')/3) -- 季节 3 数学转换

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

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

-- 日期增加日
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.获取一些指定特殊日期的函数

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

-- 获取指定日期的月初(月末)、年初(年末)日期
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以此类推。

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

-- 将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')

以上内容为日期时间函数的常见使用方法及注意事项,有需要可以收藏。

一些函数可以搭配使用,满足生产环境中的时间需求。

下一期:HiveSQL在使用聚合类函数的时候性能分析和解读

按例,欢迎点击此处关注我的个人公众号,交流更多知识。

后台回复关键字 hive,随机赠送一本鲁边备注版珍藏大数据书籍。

Hive常见时间日期函数的使用与问题整理的更多相关文章

  1. hive 常见时间日期函数的使用

    1.时间戳函数 日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 获得当前时区的UNIX时间戳: select unix_timestamp(); 1533716607 ...

  2. hive中时间-日期函数的用法

    current_date:获取当前日期 用法:select current_date: 输出:2020-12-04 unix_timestamp:获取当前unix时间戳 用法:select unix_ ...

  3. 银弹谷零代码开发V百科|使用技巧:OMG!这些时间日期函数太好用了吧,盘它

    银弹谷零代码开发V百科|使用技巧:OMG!这些时间日期函数太好用了吧,盘它 Hello~everybody!小V又来咯!这次小V给大家带来的是零代码开发V平台常用的时间日期函数.小V知道我们平时常常会 ...

  4. SQL-数学、字符串、时间日期函数和类型转换

    --数学函数 --ABS绝对值,select ABS(-99)--ceiling取上限,select CEILING(4.5)--floor去下限select FLOOR(4.5)--power 几次 ...

  5. SQLite中的时间日期函数(转)

    SQLite包含了如下时间/日期函数: datetime().......................产生日期和时间date()...........................产生日期tim ...

  6. PostgreSQL的时间/日期函数使用

    PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...

  7. SQL servcer 时间日期函数、数据类型转换

    1.时间日期函数 2.数据类型转换 3.习题 建立两个表,一个部门表,一个人员表.部门:部门的编号,部门的名称,部门的职责.人员:人员的编号,姓名,年龄,性别,cid所属部门

  8. [转] PostgreSQL的时间/日期函数使用

    PS:http://blog.csdn.net/love_rongrong/article/details/6712883 字符串模糊比较 日期类型的模糊查询是不能直接进行的,要先转换成字符串然后再查 ...

  9. SQL server 数据库——数学函数、字符串函数、转换函数、时间日期函数

    数学函数.字符串函数.转换函数.时间日期函数 1.数学函数 ceiling()--取上限  select ceiling(oil) as 油耗上限 from car floor()--取下限 sele ...

  10. SQLite中的时间日期函数

    SQLite包含了如下时间/日期函数: datetime().......................产生日期和时间 date()...........................产生日期 t ...

随机推荐

  1. Knockin' On PHP's Door ---PHP入门必知(持续更新)

    1.->.=> 和 :: 区别: ::   类中调用静态方法时用->  类中调用属性和非静态方法=> 是键值对,比如在关联数组中用 $arr = ["name&quo ...

  2. python入门教程之十二Open及file操作

    读和写文件 open() 将会返回一个 file 对象,基本语法格式如下: open(filename, mode) filename:包含了你要访问的文件名称的字符串值. mode:决定了打开文件的 ...

  3. OpenTiny 的这些特色组件,很实用,但你应该没见过

    大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 前面给大家介绍了 OpenTiny 快速创建 Vue Ad ...

  4. Spring Boot 整合 Kafka

    Kafka 环境搭建 kafka 安装.配置.启动.测试说明: 1. 安装:直接官网下载安装包,解压到指定位置即可(kafka 依赖的 Zookeeper 在文件中已包含) 下载地址:https:// ...

  5. day13:迭代器&高阶函数(map,reduce,filter,sorted)

    迭代器 1.迭代器的定义: 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象) 2.迭代器的概念: 迭代器指的是迭代取值的工具,迭代是一个重复的过程, 每次重复都是基于上一次的结果而继续的 ...

  6. 关于react的Tabs组件中TabPane的bug

    今天解决了我自认为一个很不起眼的Bug. 我的Tabs下面有5个tabPane,并且这几个tabPane共用了一个search组件,今天遇到了一个bug,就是这几个组件使用公共查找组件的时候,前一个组 ...

  7. Java学习笔记06

    1. 类和对象 1.1 类和对象 ​ 客观存在的事物皆为对象,所以我们也常常说万物皆对象. 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和行为 ...

  8. DyLoRA:使用动态无搜索低秩适应的预训练模型的参数有效微调

    又一个针对LoRA的改进方法: DyLoRA: Parameter-Efficient Tuning of Pretrained Models using Dynamic Search-Free Lo ...

  9. shell脚本编程(一)

    c81ba641-5ed7-4ab9-a7c0-e319e0f3890b 初识shell脚本编程 最近项目需求,需要了解下shell脚本编程,所以自己就必须玩玩了= = 初识shell脚本编程,找了几 ...

  10. Pillow + pytesseract + tesseract-ocr 破解简单的图形验证码

    前言: 我们在做WEB UI自动化测试时,会遇到一些图形验证码,今天就来简单介绍下,如何来识别简单的图形验证码. 一.安装 ◇ Pillow pip3 install Pillow ◇ pytesse ...