首页 > 其他分享 >HIVE中对于时间变换的处理

HIVE中对于时间变换的处理

时间:2023-07-25 18:45:08浏览次数:29  
标签:start 变换 year HIVE 处理 add time -- select

一、获取月份第一天/最后一天

--需求一:获取月份第一天/最后一天
--方式一:last_day
--获取当月第一天
select date_add(last_day(add_months('2020-06-14',-1)),1);
--获取当月最后一天
select last_day('2020-06-14');
 
--方式二:floor_month(注:必须转换成时间戳处理!)
--获取当月第一天
select to_date(floor_month(cast('2020-06-14' as timestamp)));
select to_date(floor_month(from_utc_timestamp(unix_timestamp('2020-06-14','yyyy-MM-dd')*1000,'GMT+8')));
--获取当月最后一天
select date_sub(add_months(floor_month(cast('2020-06-14' as timestamp)),1),1);
 
--方式三:trunc
desc function extended trunc;
--获得当月的第一天
select trunc('2020-06-14','MM');
--获得当月的最后一天
select date_sub(trunc(add_months('2020-06-14',1),'MM'),1);

二、获得年份的第一天/最后一天

--方式一:floor_year获取当年的第一天
--from_unixtime返回'string'型
select to_date(floor_year(cast(from_unixtime(unix_timestamp()) as timestamp)));
 
--floor_year获取当年的最后一天
select to_date(date_sub(add_months(floor_year(cast(from_unixtime(unix_timestamp()) as timestamp)),12),1));
 
--方式二:trunc获取当年的第一天/最后一天
 
--trunc获取当年的第一天
select trunc(from_unixtime(unix_timestamp()),'YYYY');
 
--trunc获取当年的最后一天
select date_sub(add_months(trunc(from_unixtime(unix_timestamp()),'YYYY'),12),1);

三、获取时间区间中的连续区间日期

--获得时间区间的方法一:
--利用函数关系做变换,逻辑强
select if(year(start_time_t)=year(add_months(start_time_t,12*p)),start_time_t,trunc(add_months(start_time_t,12*p),'YYYY')) start_time_t_sec,
       if(year(stop_time_t)=year(add_months(start_time_t,12*p)),stop_time_t,add_months(date_sub(trunc(add_months(start_time_t,12*p),'YYYY'),1),12)) stop_time_t_sec
from (
         select from_unixtime(unix_timestamp(start_time, 'yyyyMdd'), 'yyyy-MM-dd') start_time_t,
                from_unixtime(unix_timestamp(stop_time, 'yyyyMdd'), 'yyyy-MM-dd')  stop_time_t
         from (
                  select '2015506' start_time,
                         '2022712' stop_time
              ) t1
     )t2
lateral view posexplode(split(space(year(stop_time_t)-year(start_time_t)),' ')) tmp as p,v;
 
--获得时间区间的方法二:
--拼接写法似乎也差不多代码量,但是逻辑简单
select if(year(start_time_t)=year(add_months(start_time_t,12*p)),start_time_t,concat(year(add_months(start_time_t,12*p)),'-','01-01')) start_time_t_sec,
       if(year(stop_time_t)=year(add_months(start_time_t,12*p)),stop_time_t,concat(year(add_months(start_time_t,12*p)),'-','12-31')) stop_time_t_sec
 
from (
         select from_unixtime(unix_timestamp(start_time, 'yyyyMMdd'), 'yyyy-MM-dd') start_time_t,
                from_unixtime(unix_timestamp(stop_time, 'yyyyMMdd'), 'yyyy-MM-dd')  stop_time_t
         from (
                  select '20150506' start_time,
                         '20220712' stop_time
              ) t1
     )t2
         lateral view posexplode(split(space(year(stop_time_t)-year(start_time_t)),' ')) tmp as p,v;

该需求的结果显示:

image

总结:

1、月份处理函数:last_day、floor_month、trunc;

2、年份处理函数:floor_year、trunc;

3、时间区间处理函数选择:posexplode、split、space。

转载:
https://blog.csdn.net/A_static/article/details/125744710

标签:start,变换,year,HIVE,处理,add,time,--,select
From: https://www.cnblogs.com/Uni-Hoang/p/17580634.html

相关文章

  • 线程池问题记录以及处理
    现象每天到业务高峰期就会出现提交线程被拒绝。疑问点什么原因会导致activethreads远远小于poolsize的情况下,提交任务失败关键信息线程池配置ExecutorServiceaService=newThreadPoolExecutor(130,300,60L......
  • Lightroom Classic 2023 - 照片后期处理软件mac/win版
    LightroomClassic2023是一款专业的数字照片管理和后期处理软件。它提供了一系列强大的工具和功能,帮助摄影师和创意艺术家对照片进行组织、编辑和优化。→→↓↓载LightroomClassic2023mac/win版 LightroomClassic2023具有直观的用户界面,使得用户能够轻松浏览和管理他......
  • 数据仓库hive的工作原理
    数据仓库Hive的工作原理数据仓库是一个用于存储和管理大数据的系统,而Hive是一款基于Hadoop的数据仓库工具。本文将介绍Hive的工作原理,并通过代码示例来说明其应用。Hive的基本原理Hive是基于Hadoop的一个数据仓库工具,它允许用户使用类似于SQL的语言(HQL)来查询和分析大规模的数......
  • 详解Python图像处理Pillow库
    在Python的图像处理领域,Pillow是一个强大而广泛使用的第三方库。它提供了丰富的图像处理功能,包括打开、保存、调整大小、裁剪、旋转等操作。本文将详细介绍Pillow库的使用方法,并通过代码示例进行讲解,帮助你理解和应用Pillow库进行图像处理。一、安装和导入Pillow库在使用Pillo......
  • php错误处理
    1、介绍在PHP中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。有三种不同的处理方法:die函数自定义错误和错误触发器错误报告2、die函数die()函数输出一条消息,并退出当前脚本。die(status)如果 status 是字符......
  • php异常处理
    1、介绍异常用于在指定的错误发生时改变脚本的正常流程。PHP5提供了一种新的面向对象的错误处理方法。异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。2、抛出异常thrownewException("Valuemustbe1orbelow");当异常被抛出时,其后的......
  • 分享一个关于网页上无法复制内容的处理技巧
      最近有朋友吐槽CSDN连个框选代码、复制功能都要登录才能使用,之前也有听到过类似的吐槽,这对于很多面向百度开发的程序员并不友好,于是想了个办法。  以CSDN为例,当需要复制CSDN上的内容是,可以先在开发者工具的控制台中输入下面的代码执行一遍,就可以使用框选复制了:  doc......
  • Mybatis 多对一处理
    多对一处理:多个学生,对应一个老师对于学生而言,关联...多个学生关联一个老师(多对一)对于老师而言,集合,一个老师,有很多学生(一对多) 测试环境搭建1:导入lombok(不用lombok忽略)2:新建实体类Teacher,Student3:建立Mapper接口4:建立Mapper.xml文件5:在核心配置文件中绑定注册我们的......
  • hive表数据导出
      第二种,是放到了本地的不是放在HFDS里的......
  • 编译期处理
    默认构造器publicclasstest{}编译classpublicclasstest{ publictest(){ super(); }}自动拆装箱泛型集合取值foreach循环枚举类try-with-resources匿名内部类......