Hive時間函數-年份相加減

 

目前為止搜了很多资料,都没有找到Hive关于时间 年份,月份的处理信息,所以就自己想办法截取啦

本来是用了概数,一年365天去取几年前的日期,后来测试的发现不够精准,然后给提了mantis bug.

emmmmm..... 然后就想办法精准吧,找不到相应函数就自己来凑哈哈哈

 

例如,我需要取当前时间3年以前的日期 (当前日期为2019年11月14日晚8点+)

实现思路:(通过字符串的截取与拼接)

1.先获取当前时间

2.取的当前时间的年份信息

3.将当前时间的年份信息 减去 3

4.将新的年份与原来的月份及日 拼接

5.即可得到精准的三年以前的数据信息啦

 

首先我们获取当前时间信息:

select from_unixtime(unix_timestamp()); //输出结果 2019-11-14 20:41:03

 

得到当前时间的年份:

select from_unixtime(unix_timestamp()); // 输出结果 2019

 

得到当前时间的年份的三年以前的年数据:

select  year(from_unixtime(unix_timestamp()))-3; //输出结果 2016

 

拼接 新的年份信息 与 原来的月份及日信息 (因为我这里目前只需要精准到日,所以就不附加时分秒信息了)

select  concat(cast ((year(from_unixtime(unix_timestamp(),'yyyy-MM-dd'))-3) as string),substr(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),5,6)); //输出结果 2016-11-14

 

以上便得到了我们要的三年以前的今天啦,往后我们在需要使用年份比较数据的时候均可借鉴此思路(再还没有出现合适的年份加减函数之前)

ps: 在实际应用中我们也可以使用具体的日期来代替当前日期

例如: select  concat(cast ((year('2019-11-11')-3) as string),substr('2019-11-11',5,6));  //输出结果 2016-11-11

 

我们也可以使用数据库中的表日期字段来代替当前日期

例如:select  concat(cast ((year(t.startdate)-3) as string),substr(t.startdate,5,6)) , t.startdate  from  t_testyear t ; // 其中startdate是数据表中的一个日期字段

 

 posted on 2019-11-14 20:54  阿叮339  阅读(4554)  评论(0编辑  收藏  举报