hive substr函数_数据分析工具篇——HQL函数及逻辑

本篇文章我们梳理一下hive常用的函数,对于hive而言,常用的函数并不是特别多,往往记住关键几个,就可以解决80%的问题,这也是大家喜欢hive的原因,那么,常用的函数有哪些呢?

时间函数

b9d6566a756d736617f35cb54f0381ab.gif 3a33695b07b45a70a352e39acd1778e7.png

1)时间格式转化

常用的日期格式主要有两个:时间戳和日期格式,时间戳便于计算,日期格式便于阅读,两者各有利弊,所以需要相互转换,转换的对应函数主要有:

from_unixtime(timestamp,dateformat):将时间戳转化为日期格式,格式必须是10位,毫秒级的时间戳需要用cast转化成秒级。unix_timestamp(date,dateformat):日期格式转化为时间戳,如果括号内没有参数则表示返回当前的时间戳。

例如:

时间戳转日期格式:

select  from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as date_time,  from_unixtime(1537924406,'yyyy-MM-dd') as date_time1from dual;

如果时间戳是毫秒级,则字段修改为:

from_unixtime(cast(unix_timestamp()/1000 as int),'yyyy-MM-dd HH:mm:ss') as date_time

日期格式转时间戳:

select  unix_timestamp() as time_stamp,  --返回当前时间戳;  unix_timestamp('2018-09-26 9:13:26','yyyy-MM-ddHH:mm:ss') as time_stamp1from dual;

作为一个数据,在不同系统之间游走,有没有经常遇到时间格式不匹配的情况,所以需要做格式的转化:

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_time1from dual;--2018-09-12 00:00:00

有没有发现一个问题,date_format只能从yyyy-MM-dd格式转化成其他格式,对于其他类型,例如:yyyyMMdd,则不能处理,所以需要灵活一点,将各个格式的时间转化成时间戳,再通过时间戳转化成其他格式:

select from_unixtime(unix_timestamp(substr('20191007000000',1,8),'yyyyMMdd'),'yyyy-MM-dd');

如此一来,各种格式都可以转化。

2)日期的加减差运算:

日期的加减是对日期格式数据的基本运算,常用的是时间差计算、加一天、减一天等。

时间差计算:

datediff(date,date1);日期差,即两个日期差几天。months_between(date,date1);两个日期差几个月,用法一致。select datediff('2015-05-22','2015-05-29') as date_ff; --[-7]

在原日期上加n天:

date_add:在现在日期上增加天数,

add_months是增加月份,用法一致。

select date_add('2015-05-22 15:34:23',2); --2015-05-24

在原日期上减n天:

date_sub:在现在日期上减少天数。

select date_sub('2015-05-22 15:34:23',2); --2015-05-20

3)时间截取:

如果我们获取到一个完整的时间,但是只想用其中的一部分,势必牵扯到时间截取的功能,常见的时间截取主要是如下几个函数:

to_date:获取完整时间中的日期部分:

select to_date('2015-06-01 15:34:23'); --2015-06-01

year:获取完整时间中的年份:

select year('2015-05-22 15:34:23'); --2015

month:获取完整时间中的月份:

select month('2015-05-22 15:34:23'); --5

day:获取完整时间中的日期:

select day('2015-05-22 15:34:23'); --22

4

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值