【Hive】hive中的常用日期處理函數


date_format

釋義:格式化日期

用法:date_format(date,格式)

例如:

將日期格式化為:2020-05-01和2020-05

hive (default)> select date_format('2020-05-01 12:00:00','yyyy-MM-dd');
_c0
2020-05-01
hive (default)> select date_format('2020-05-01 12:00:00','yyyy-MM');
_c0
2020-05

date_add

釋義:日期加法函數,數字為正,則加多少天,若數字為負數,則為減多少天;

用法:date_add(date,number);

例如:

將日期增加或減少4天;

hive (default)> select date_add('2019-05-09',4);
_c0
2019-05-13
Time taken: 0.034 seconds, Fetched: 1 row(s)
hive (default)> select date_add('2019-05-09',-4);
_c0
2019-05-05
Time taken: 0.049 seconds, Fetched: 1 row(s)

date_sub

釋義:日期減法函數,數字為正,則減多少天,若數字為負數,則為加多少天

用法:date_sub(date,number)

例如:

將日期增加或減少4天

hive (default)> select date_sub('2019-05-09',4);
_c0
2019-05-05
Time taken: 0.04 seconds, Fetched: 1 row(s)
hive (default)> select date_sub('2019-05-09',-4);
_c0
2019-05-13
Time taken: 0.058 seconds, Fetched: 1 row(s)

next_day

釋義:取該日期的下一個周幾的日期

用法:

next_day(date,dayofweek)

星期一到星期日的英文(Monday,Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday)

例如:

取5.1后的下一個周五

hive (default)> select next_day('2020-05-01',"Fri");
_c0
2020-05-08

last_day

釋義:取當月的最后一天日期

用法:last_day(date)

例如:

取5月的最后一天日期

hive (default)> select last_day('2020-05-01');
_c0
2020-05-31
hive (default)> select last_day('2020-04-01');
_c0
2020-04-30

datediff

釋義:日期比較函數,第一個日期減去第二個時期數字,為正,則前者大於后者,為負,則前者小於后者;

用法:datediff(date1,date2)

例如:

比較5月1日和5月5日的大小

hive (default)> select datediff('2020-05-01','2020-05-05');
_c0
-4

dayofmonth

釋義:查詢該日期在本月的第多少天

用法:dayofmonth(date)

例如:

5月6號在五月是第多少天

hive (default)> select dayofmonth('2020-05-06');
_c0
6

current_date

釋義:獲取當前日期

hive (default)> select current_date;
_c0
2020-05-14

current_timestamp

釋義:獲取當前時間

hive (default)> select current_timestamp;
_c0
2020-05-14 10:26:57.613

add_months

釋義:日期加一個月

用法:add_months(date,number)

例如:

2020-05-03加一個月

hive (default)> select add_months('2020-05-03',1);
_c0
2020-06-03

year

釋義:獲取時間的年份

用法:year(date)

例如:

當前日期所在的年份

hive (default)> select year('2020-05-14 12:00:00');
_c0
2020

month

釋義:獲取時間的月份

用法:month(date)

例如:

當前日期所在的月份

hive (default)> select month('2020-05-14 12:00:00');
_c0
5

day

釋義:獲取時間的天

用法:day(date)

例如:

獲取日期中的天

hive (default)> select day('2020-05-14 12:00:00');
_c0
14

hour

釋義:獲取時間的小時

用法:hour(time) 若時間為空,則取出值為null

例如:

獲取時間中的小時

hive (default)> select hour('2020-05-14 12:00:00');
_c0
12

minute

釋義:獲取時間的分鍾

用法:minute(time) 若時間為空,則取出值為null

例如:

獲取時間中的分鍾

hive (default)> select minute('2020-05-14 12:04:50');
_c0
4

second

釋義:獲取時間的秒

用法:second(time) 若時間為空,則取出值為null

例如:

獲取時間中的秒

hive (default)> select second('2020-05-14 12:04:53');
_c0
53

weekofyear

釋義:日期所在年份的第多少周

用法:weekofyear(date)

例如:

當前日期是所在年份的第多少周

hive (default)> select weekofyear(current_date);
_c0
20

to_date

釋義:轉日期函數,默認轉為yyyy-MM-dd格式

用法:to_date(time)

例如:

當前時間轉為日期格式

hive (default)> select to_date(current_timestamp);
_c0
2020-05-14

常用日期需求

1.取當月第1天

--先獲取當前日期在該月份的第n天,然后當前日期減去第(n-1)天,則為結果
hive (default)> select date_sub('2020-05-14',dayofmonth('2020-05-14')-1);
_c0
2020-05-01

2.取當月第6天

--先獲取該日期在該月的第n天,然后當前日期減去第(n-1)天,再增加(m-1)天,則為結果
hive (default)> select date_add(date_sub('2020-05-14',dayofmonth('2020-05-14')-1),5);
_c0
2020-05-06

3.查詢下一個月的第一天

--先獲取最后一天,然后日期+1,則為下一月第一天
hive (default)> select date_add(last_day('2020-05-14'),1);
_c0
2020-06-01
--先獲取今天是當月第幾天,算出當月第一天,然后加一個月,則為下月第一天
hive (default)> select add_months(date_sub('2020-05-14',dayofmonth('2020-05-14')-1),1);
_c0
2020-06-01

4.獲取當前日期的所在月份

--日期格式化方式
hive (default)>  select date_format('2020-05-14','MM');
_c0
05
--直接month獲取方式
hive (default)> select month('2020-05-14');
_c0
5

5.獲取本周一的日期

--先獲取下周一的日期,然后減去7天,則為本周一日期
hive (default)> select date_add(next_day(current_date,"MO"),-7);
_c0
2020-04-27

6.給出一個日期計算該日期為周幾

--先找一個周一的日期,比如我們找的2020-05-04,然后和當前日期(2020-05-14)做比較,就會得出相差的天數,再用pmod獲取正余數的函數來獲取最后的余數(0-6分別代表周日~周六),本實例做+1操作,直接得出周幾的結果;
hive (default)> select pmod(datediff('2020-05-14','2020-05-04') + 1,7);
_c0
4

總結

在日常hive計算中,最常用的日期函數有5個:

date_format:常用於處理月指標

date_add或date_sub: 常用於處理日指標

next_day:常用於處理周指標

last_day:常用於處理月指標

datediff:常用於處理日指標


免責聲明!

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



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