hive sql时间操作

最近做了一些mysql转换为hive sql的工作,发现hive sql不支持INTERVAL操作,对于hive sql需要的时间需要进行简单的操作,总结一下:

1.hive sql获取当前时间

1)获取时间戳

unix_timestamp()

2)获取指定格式的时间

from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')

2.获取过去一分钟的时间

例:现在是2019-10-1 12:06:12
获取2019-10-1 12:05:12的时间

1)获取过去一分钟的时间戳

时间戳的机制是没过1秒,时间戳+1,所以获取上一分钟的时间戳,可以在现在时间的时间戳的基础上减去60

unix_timestamp('2019-10-1 12:06:12') - 60

2)获取上一秒的指定时间格式

from_unixtime(unix_timestamp('2019-10-1 12:06:12') - 60,'yyyy-MM-dd HH:mm:ss')

3.获取上一个月的时间

1)通过时间戳加减获取

from_unixtime(unix_timestamp() - 60 * 60 * 24 * 30,'yyyy-MM-dd HH:mm:ss')

2)通过字符串拼接

concat(from_unixtime(unix_timestamp(),'yyyy-'),month(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')) -1)

4.获取过去一分钟

例:现在是2019-10-1 12:06:12
获取2019-10-1 12:05:00的时间
开始的思路:
hive存在提取时间年,月,日的时间函数。

select year('2015-04-02 11:32:12');
输出:2015
select month('2015-12-02 11:32:12');
输出:12
select day('2015-04-13 11:32:12');
输出:13
select hour('2015-04-13 11:32:12');
输出:11
select minute('2015-04-13 11:32:12');
输出:32
select second('2015-04-13 11:32:56');
输出:56

所以我想获取的分钟数下减1,再进行字符串拼接。但是会出现如下的问题:

在这里插select concat(concat(from_unixtime(unix_timestamp('2019-10-1 12:00:12'),'yyyy-MM-dd HH:'),minute(from_unixtime(unix_timestamp('2019-10-1 12:00:12'),'yyyy-MM-dd HH:mm:ss'))-1),':00');

输出:2019-10-01 12:-1:00

这是不合法的,所以需要进行时间戳转化才可以。

select concat(concat(from_unixtime(unix_timestamp('2019-10-1 12:00:12'),'yyyy-MM-dd HH:'),minute(from_unixtime(unix_timestamp('2019-10-1 12:00:12') - 60,'yyyy-MM-dd HH:mm:ss'))),':00');

输出:2019-10-01 12:59:00
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值