Hive計算字符串格式的日期相差秒數


需求:hive表中,存放着無法直接識別的字符串格式的時間,如'20170728102031',要計算兩個時間相差的秒數。

解決方法:

一、先將字符串調整為hive可以識別的格式,即將形如'20170728102031' 轉成 '2017-07-28 10:20:31'。 因為hive的 regexp_replace 不支持子語句,沒法一次轉換,只能用萬能的 substr 和拼接函數來寫了

select concat(substr('20170728102031',1,4),'-',substr('20170728102031',5,2),'-',substr('20170728102031',7,2),' ',substr('20170728102031',9,2),':',substr('20170728102031',11,2),':',substr('20170728102031',13,2))

 

二、用 unix_timestamp 轉成unix時間戳,然后計算兩個日期相差秒數 

select
 unix_timestamp(concat(substr('20170728102031',1,4),'-',substr('20170728102031',5,2),'-',substr('20170728102031',7,2),' ',substr('20170728102031',9,2),':',substr('20170728102031',11,2),':',substr('20170728102031',13,2)))
-
unix_timestamp(concat(substr('20170728112031',1,4),'-',substr('20170728112031',5,2),'-',substr('20170728112031',7,2),' ',substr('20170728112031',9,2),':',substr('20170728112031',11,2),':',substr('20170728112031',13,2)))

 

當然了,如果要計算相差分鍾數,直接除以60就ok了。

還有一種方法是分別用 datediff(datetimeA)、hour(datetimeA)-hour(datetimeB) 、minute(datetimeA)-minute(datetimeB)…… 分別計算兩個日期的天數差、小時差、分鍾差等等然后再轉換成同一單位。我覺得這樣太繁瑣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM