【hive常用函数一】日期函数

栏目: 服务器 · 发布时间: 6年前

使用hive进行数据处理的过程种,遇到不少问题,总结之前的一些开发经验,把之前的一些处理技巧mark一下:

使用通用的哑表dual作为测试表用。

1、时间戳转换

日期格式转换时间戳只能精确到秒(即长度只有10位,而不是13位)

unix_timestamp(date,dateformat)

unix_timestamp()不入参,函数可以直接获取当前的时间戳

select unix_timestamp() as time_stamp,unix_timestamp('2018-09-26 9:13:26','yyyy-MM-ddHH:mm:ss') as time_stamp1 from dual;

time_stamp      time_stamp1

1538054001      1537924406

时间戳转换成日期格式,必须长度为10

from_unixtime(timestamp,dateformat)

select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') asdate_time,from_unixtime(1537924406,'yyyy-MM-dd') as date_time1 from dual;

date_time       date_time1

2018-09-27 21:16:13     2018-09-26

如果是毫秒级别时间戳13位,可以这么转换cast(timestamp/1000 as bigint)

2、日期格式化

把字符串或者日期转成指定格式的日期

date_format(string/date,dateformate) 

select date_format('2018-09-12','yyyy-MM-dd HH:mm:ss') as date_time,date_format('2018-09-12','yyyyMMdd') as date_time1 from dual;

date_time       date_time1

2018-09-12 00:00:00     20180912

还有一个to_date(date)函数 返回 yyyy-MM-dd日期格式

3、日期加减/月份加减(位移)

对日期进行加减法,date_add函数参数n是正数往后推n天,如果是负数往前推n天,date_sub函数相反

对月份进行加减,add_months 函数参数m是正数往后推m个月,如果是负数往前推m个月

date_add(date,n)

date_sub(date,n)

select date_add('2018-09-27',2) as date1,date_add('2018-09-27',-2) as date2 from dual;

date1   date2

2018-09-29      2018-09-25



add_months(date,m)

select add_months('2018-09-27',1) as month1,add_months('2018-09-27',-1) as month2 from dual;

month1  month2

2018-10-27      2018-08-27

4、日期差/月份差

日期差计算两个日期之间相差多少天,前面的日期减去后面的日期

月份差计算前面的日期减去后面的日期计算月份差,这个结果是按照天数占月分的比值计算得到的,是一个小数,可以自己取整

datediff(date,date1)

select datediff('2018-09-22','2018-08-02') as day_diff,datediff('2018-08-02','2018-09-22') as day_diff1 from dual;

day_diff        day_diff1

51      -51

months_between(date,date1)

select months_between('2018-09-22','2018-08-02') as mon_diff,round(months_between('2018-09-22','2018-08-02')) as mon_diff1 from dual;

mon_diff        mon_diff1

1.64516129      2.0

5、获取月末、月初、年初、当前日期下个星期X的日期

获取月末最后一天

last_day(date)

select last_day('2018-09-30') as date_time,last_day('2018-09-27 21:16:13') as date_time1 from dual;

date_time       date_time1

2018-09-30      2018-09-30

获取月初、年初

trunc(date,format)  format:MONTH/MON/MM, YEAR/YYYY/YY

select trunc('2018-09-27','YY') as date_time,trunc('2018-09-27 21:16:13','MM') as date_time1 from dual;

date_time       date_time1

2018-01-01      2018-09-01

当前日期下个星期X的日期

next_day(date,formate) format:英文星期几的缩写或者全拼

select next_day('2018-09-27','TH') as date_time,next_day('2018-09-27 21:16:13','TU') as date_time1 from dual;

date_time       date_time1

2018-10-04      2018-10-02

目前常用的一些日期函数大概就是如此,还有一些简单的year()、month()、day()等等就不一一列了。

本文由brucelu 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络共和国

网络共和国

[美] 凯斯·桑斯坦 / 黄维明 / 上海人民出版社 / 2003-6-1 / 15.00元

本书主要讨论网络中的民主问题。网络技术已经深刻地影响了我们的生活,我们随时可以获得我们需要的信息,我们也随时可以与别人联系,那么网络技术是不是就是民主的福音呢?作者回答说不,他认为通过网络人们更容易获得的是自己喜欢的信息,而拒绝接受自己不喜欢的信息,事实上人们得到的是窄化的信息,很多的网站也不和与自己立场相反的网站链接。而在一个真正的民主的环境中,信息应是多元的并且不是我们事先选择的,在其中我们还......一起来看看 《网络共和国》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器