hive时间处理与MySQL、Oracle数据库,存在一定的差异,当前时间的获取,以及时间的加减,下面会提供详细的计算处理方式
一、hive时间获取与计算
1,获取当前时间
语法:CURRENT_date()
返回值:年月日
2,获取当前时间戳
(1)unix_timestamp()
语法: unix_timestamp()
返回值: bigint
说明: 获得当前时区的UNIX时间戳
需要将bigint的时间戳转换为时间类型的时间戳
语法: from_unixtime(bigint unixtime[, string format])
返回值:年月日时分秒
举例:select from_unixtime(unix_timestamp() ,'yyyy-MM-dd HH:mm:ss')
(2)CURRENT_TIMESTAMP()
语法:CURRENT_TIMESTAMP()
返回值:年月日时分秒
3,取得昨天日期
select date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1);
select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1);
select date_format(date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1);
4,取得明天日期
select date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1);
select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1);
5,hive时间小时加减
思路:常用是转成时间戳再加减,
格式:select from_unixtime(unix_timestamp(时间字段)+小时数*60*60,'yyyy-MM-dd HH:mm:ss')
示例:select from_unixtime(unix_timestamp(CURRENT_TIMESTAMP())+12*60*60,'yyyy-MM-dd HH:mm:ss')
释义:查询当前时间+12小时的时间结果
二、Oracle时间获取与计算
1,时间加法
--加1秒
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;
--加1分钟
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;
--加1小时
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;
--加1天
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;
--加1星期
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;
--加1月
select sysdate,add_months(sysdate,1) from dual;
--加1年
select sysdate,add_months(sysdate,12) from dual;
2,时间减法
方法与时间加法一致,只是将数字修改为负数即可
--减1秒
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;
--减1分钟
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;
--减1小时
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual;
--减1天
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual;
--减1星期
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual;
--减1月
select sysdate,add_months(sysdate,-1) from dual;
--减1年
select sysdate,add_months(sysdate,-12) from dual;
3,时间间隔操作
-- 当前时间减3分钟
select sysdate,sysdate - interval '3' MINUTE from dual
-- 当前时间减3小时
select sysdate - interval '3' hour from dual
-- 当前时间减3天
select sysdate - interval '3' day from dual
-- 当前时间减3月
select sysdate,sysdate - interval '3' month from dual
-- 当前时间减3年
select sysdate,sysdate - interval '3' year from dual
-- 当前时间减去8*3小时
select sysdate,sysdate - 8 *interval '3' hour from dual
三、MySQL时间获取与计算
1,日期相加
-- 当前时间加1秒
DATE_ADD(NOW(),INTERVAL 1 second)
-- 当前时间加30分钟
DATE_ADD(NOW(),INTERVAL 30 MINUTE)
-- 当前时间加1小时
DATE_ADD(NOW(),INTERVAL 1 hour)
-- 当前时间加1天
DATE_ADD(NOW(),INTERVAL 1 day)
-- 当前时间加1星期
DATE_ADD(NOW(),INTERVAL 1 week)
-- 当前时间加1个月
DATE_ADD(NOW(),INTERVAL 1 month)
-- 当前时间加1季度
DATE_ADD(NOW(),INTERVAL 1 quarter)
-- 当前时间加1年
DATE_ADD(NOW(),INTERVAL 1 year)
2,日期相减
-- 当前时间减1秒
DATE_SUB(NOW(),INTERVAL 1 second)
-- 当前时间减30分钟
DATE_SUB(NOW(),INTERVAL 30 MINUTE)
-- 当前时间减1小时
DATE_SUB(NOW(),INTERVAL 1 hour)
-- 当前时间减1天
DATE_SUB(NOW(),INTERVAL 1 day)
-- 当前时间减1星期
DATE_SUB(NOW(),INTERVAL 1 week)
-- 当前时间减1个月
DATE_SUB(NOW(),INTERVAL 1 month)
-- 当前时间减1季度
DATE_SUB(NOW(),INTERVAL 1 quarter)
-- 当前时间减1年
DATE_SUB(NOW(),INTERVAL 1 year)
我是晓之以理的喵,欢迎大家多多交流~~