1、時間戳與任何格式的日期互轉
from_unixtime(時間戳,時間格式)
將時間戳轉換爲致指定的日期格式
hive> select from_unixtime(1234567890,'yyyy-MM-dd');
2009-02-14
hive> select from_unixtime(1234567890,'yyyy-MM');
2009-02
hive> select from_unixtime(unix_timestamp());
2017-01-07 11:36:55
unix_timestamp()
獲取當前時間對應的時間戳
hive> select unix_timestamp();
1578208499
unix_timestamp(時間字符串)
將yyyy-MM-dd HH:mm:ss格式的時間字符串轉換爲時間戳
hive> select unix_timestamp('2019-11-11 10:10:10');
1573438210
unix_timestamp(時間字符串,時間格式)
將時間格式的時間字符串轉換成時間戳
hive> select unix_timestamp('2016-07-16 14:02:03','yyyy-MM-dd HH:mm:ss');
1468648923
注意:
使用以上兩個函數,其實就完全可以將時任何格式的時間字符串轉換成時間戳,或者將時間戳轉換成任何格式的時間字符串。
2、獲取年月日時分秒周星期
獲取年份
hive> select year('2019-12-31 10:31:20');
2019
獲取月份
hive> select month('2019-12-31 10:31:20');
12
獲取日
hive> select day('2019-12-30 10:31:20');
30
獲取小時數
hive> select hour('2019-12-31 10:31:20');
10
獲取分鐘數
hive> select minute('2019-12-31 10:31:20');
31
獲取秒數
hive> select second('2019-12-31 10:31:20');
20
獲取週數
hive> select weekofyear('2019-01-23');
4
獲取星期
hive> select dayofweek('2019-11-01');
6
注意:
以上獲取年月日時分秒周的函數,如果遇到2019-01-02這樣情況時,獲取的月份是1而不是01,天是2而不是02。
4、日期運算
datediff(結束日期,開始日期)
查詢兩個日期之間使勁按之差
hive> select datediff('2019-12-31','2018-12-31');
365
date_add(基準日期,天數)
獲取在基準日期上往後推移指定天數的日期
hive> select date_add('2019-12-31',4);
2020-01-04
hive> select date_add('2019-12-31',-4);
2019-12-27
date_sub(基準日期,天數)
獲取在基準日期上往前推移指定天數的日期
hive> select date_sub('2019-12-31',4);
2019-12-27
hive> select date_sub('2019-12-31',-4);
2020-01-04
add_months('時間字符串',[-]n)
往前或往後推移n個月
hive> select add_months('2019-11-11',-1);
2019-10-11
思考題:
如果獲取兩個時間(yyyy-MM-DD HH:mm:ss)之間的小時數之差?
答:
兩個時間用hour()函數獲取紙面小時數之差n,用datediff()獲取天數之差m,m*24+n及小時數之差。
5、獲取當前時間
current_timestamp()
獲取當前的時間,精確到毫秒
hive> select current_timestamp();
2020-01-05 15:16:39.623
current_date()
獲取當前時間,精確到天
hive> select current_date();
2020-01-07
last_day(時間字符串)
獲取傳入時間的最後一天
hive> select last_day('2019-01-32');
2019-02-28
hive> select last_day('2019-01-00'); --這個很有意思哈哈
2018-12-31
to_date(時間字符串)
從時間字符串中獲取日期
hive> select to_date('2019-12-31');
2019-12-31
hive> select to_date('2019-12-31 10:00:00');
2019-12-31
6、trunc
獲取當年當月第一天:
hive> select trunc('2019-11-21','YYYY');
2019-01-01
hive> select trunc('2019-11-21','MM');
2019-11-01
獲取上年上月最後一天
hive> select date_sub(trunc('2019-11-21','YYYY'),1);
2018-12-31
hive> select date_sub(trunc('2019-11-21','MM'),1);
2019-10-31
獲取本年本月的最後一天
hive> select add_months(date_sub(trunc('2019-11-21','YYYY'),1),12);
2019-12-31
hive> select add_months(date_sub(trunc('2019-11-21','MM'),1),1);
2019-11-30
hive> select last_day('2019-11-21');
2019-11-30
7、獲取下個星期n的日期
週一:MO;週二:TU;週三:WE ;週四:TH ;週五:FR ;週六:SA;週日SU
hive> select next_day('2020-01-12','MO');
2020-01-13
hive> select next_day('2020-01-12','TU');
2020-01-14
hive> select next_day('2020-01-12','WE');
2020-01-15
hive> select next_day('2020-01-12','TH');
2020-01-16
hive> select next_day('2020-01-12','FR');
2020-01-17
hive> select next_day('2020-01-12','SA');
2020-01-18
hive> select next_day('2020-01-12','SU');
2020-01-19
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF