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是數據表中的一個日期字段