大數據Spark Sql中日期轉換FROM_UNIXTIME和UNIX_TIMESTAMP

衆所周知,數字整型用來大小比較和計算運算要比字符型快的多,因此部分業務需要把時間字段轉化爲整型方便業務的快速計算和到達,這個整形數字是選定的日期距UTC 時間 '1970-01-01 00:00:00' 開始的秒數,目前爲十位,比如常用來舉例的1234567890,但畢竟數字不方便觀察,後續還需要把這些時間數字轉換爲真正的時間字段

這裏就需要兩個函數來進行轉換UNIX_TIMESTAMP和FROM_UNIXTIME

咱們一一介紹

  • UNIX_TIMESTAMP

是把時間字段轉化爲整型,需要注意的是有些數據庫需要指明時間字段類型
比如MySQL裏是可以直接UNIX_TIMESTAMP('20200223'),而某些大數據平臺需要UNIX_TIMESTAMP('20200223','yyyyMMdd')

 

  • FROM_UNIXTIME

顧名思義就是從整型裏把時間整型進行破解成想要的時間格式,使用時可指定格式

這裏面經常用到的是UNIX_TIMESTAMP和FROM_UNIXTIME的結合,比如對一個時間字段進行歸集計算:把'2020-02-23 01:00:02','2020-02-23 01:02:31','2020-02-23 01:03:22'都歸集成'2020-02-23 01:00:00'

select FROM_UNIXTIME(unix_timestamp('20200223')+5*60*floor((substr('2020-02-23 
 00:01:02',12,2)*60+substr('2020-02-23 00:01:02',15,2))/5)) time1

補充下格式轉換:

%a	縮寫星期名
%b	縮寫月名
%c	月,數值
%D	帶有英文前綴的月中的天
%d	月的天,數值(00-31)
%e	月的天,數值(0-31)
%f	微秒
%H	小時 (00-23)
%h	小時 (01-12)
%I	小時 (01-12)
%i	分鐘,數值(00-59)
%j	年的天 (001-366)
%k	小時 (0-23)
%l	小時 (1-12)
%M	月名
%m	月,數值(00-12)
%p	AM 或 PM
%r	時間,12-小時(hh:mm:ss AM 或 PM)
%S	秒(00-59)
%s	秒(00-59)
%T	時間, 24-小時 (hh:mm:ss)
%U	周 (00-53) 星期日是一週的第一天
%u	周 (00-53) 星期一是一週的第一天
%V	周 (01-53) 星期日是一週的第一天,與 %X 使用
%v	周 (01-53) 星期一是一週的第一天,與 %x 使用
%W	星期名
%w	周的天 (0=星期日, 6=星期六)
%X	年,其中的星期日是周的第一天,4 位,與 %V 使用
%x	年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y	年,4 位
%y	年,2 位

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章