最近用hive比較多,雖然效率低,可是因爲都是T+1的業務模式。因此也就不要求太多了,夠用就行。其中用的吧比較多就是時間了,因爲大數據中不少字段都不是標準的時間類型字段,因此期間涉及了不少的時間日期字段的處理,這裏作一個彙總。一遍之後查詢使用。也方便你們學習。sql
1.先來一個比較老的,select unix_timestamp() ;數據庫
結果以下:函數
2.經過提示可知該用法已經被放棄了建議採用current_timestamp來替代。查結果以下:工具
3.若是當前時間爲int類型則須要轉義一下好比使用from_unixtime()學習
SELECT from_unixtime(unix_timestamp()); --2018-02-27 14:51:01
4.獲取當前日期CURRENT_DATE。代碼以下:大數據
SELECT CURRENT_DATE; --2018-02-27
1.對比日期函數,常常用於日期之間比較大小,或者計算差值,日期加減。spa
日期差值:datadiff(結束日期,開始日期),返回結束日期減去開始日期的天數。unix
日期加減:date_add(時間,增長天數),返回值爲時間天+增長天的日期;date_sub(時間,減小天數),返回日期減小天后的日期。code
執行狀況如圖所示:blog
注意若是想知道相差多少個小時又怎麼去求那?咱們其實稍加改造便可。
hour函數能夠得到時間字段的小時數和datediff來獲取兩個日期相差的天數。而後利用天數*24+hour的差值即爲所求,
好比咱們求2018-02-27 10:00:00 與 2018-02-25 12:00:00相差多少?
實例代碼以下:
select (hour('2018-02-27 10:00:00')-hour('2018-02-25 12:00:00')+(datediff('2018-02-27 10:00:00','2018-02-25 12:00:00'))*24) as hour_subValue --46
補充一個:返回當前時間下再增長num_months個月的日期 add_months(string start_date, int num_months)
2.上面介紹了hour函數,那麼咱們也會須要其餘的時間提取,很少說直接看代碼,年月日時分秒:
select year('2018-02-27 10:00:00'),month('2018-02-27 10:00:00'),day('2018-02-27 10:00:00'),hour('2018-02-27 10:00:00'),minute('2018-02-27 10:00:00'),second('2018-02-27 10:00:00'),weekofyear('2018-02-27 10:00:00'); --2018 2 27 10 0 0 9
補充:quarter,返回當前本年度第幾個季度。
3.日期轉換函數
to_date,語法: to_date(string timestamp),返回值爲string類型的日期
示例以下:
select to_date('2018-02-27 10:03:01') ; --2018-02-27
last_day(string date),返回這個月的最後一天的日期。
select last_day('2018-02-27 10:03:01'); --2018-02-28
next_day,返回當前時間的下一個星期幾所對應的日期 。以下
select next_day('2018-02-27 10:03:01', 'TU'); --2018-03-06
說明,輸入日期爲2-27,下個星期的週二爲03-06,若是想要知道下週一的日期就是MO,週日就是SU,以此類推。
我跟無數多小白說過,西方國家週日是每週的第一天,因此日曆和英語中都是現實週日再是週一,因此上面的下週日是3-4。注意嘍!
以上是我平時常常用的一些日期相關的處理和函數,比較方便,想不起來就過來掃一眼。畢竟hive用的比較少,相對於關係型數據庫的t-sql函數和方法仍是比較low的,畢竟是個轉義工具。目前主流仍是hivesql,不過慢慢的都在想sparksql之類技術的轉移了。之後有新的日期函數我會繼續想本文中進行彙總,方便你們查詢。