hive sql 日期格式转换

遇到一个需求,需要计算hive库中,某资产近一个月的资产值。
比如:今天是2018年2月28日,近一个月若是按照自然月来算,那么是2018年2月1日至2018年2月28日。最终需要的日期格式为:yyyyMMdd。

当日时间戳

unix_timestamp() 方法可得到当前时间的时间戳。

上月今日

使用 add_months(日期,N) 函数可将日期往前、往后推N个月。主要有两种格式:
add_months(‘yyyy-MM-dd hh:mm:ss’,N),add_months(‘yyyy-MM-dd’,N)。N为正往后推,N为负往前推。例如:

hive> select add_months('2018-02-28', 3);
OK
2018-05-31
Time taken: 0.127 seconds, Fetched: 1 row(s)
hive> select add_months('2018-02-28', -3);
OK
2017-11-30
Time taken: 0.084 seconds, Fetched: 1 row(s)
时间戳格式化

由于add_months()方法的入参“日期”不能直接使用时间戳,需做一下转化。转化函数为:from_unixtime(时间戳, 日期、时间)。表现形式主要有:from_unixtime(时间戳, “yyyy-MM-dd hh:mm:ss”),from_unixtime(时间戳, “yyyy-MM-dd “)。如下:

hive> select from_unixtime(1519818348, 'yyyy-MM-dd');
OK
2018-02-28
Time taken: 0.088 seconds, Fetched: 1 row(s)
hive> select from_unixtime(1519818348, 'yyyy-MM-dd hh:mm:ss');
OK
2018-02-28 07:45:48
Time taken: 0.089 seconds, Fetched: 1 row(s)
往后一日

根据需求,当前日期往前推一个月后,还需往后推一日。往前、往后推N个日的函数为:date_add(日期,N)。主要有两种转换格式:date_add(‘yyyy-MM-dd hh:mm:ss’,N),date_add(‘yyyy-MM-dd’,N)。N为正往后推,N为负往前推。如下:

hive> select date_add('2018-02-28', 3);
OK
2018-03-03
Time taken: 0.089 seconds, Fetched: 1 row(s)
hive> select date_add('2018-02-28', -3);
OK
2018-02-25
Time taken: 0.085 seconds, Fetched: 1 row(s)

最终满足需求的表达式为:

from_unixtime(unix_timestamp(concat(date_add(add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd hh:mm:ss'),-1),1),' 10:10:10')), 'yyyyMMdd')
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值