本篇博客介绍Hive中的各种日期函数用法,目前来看本文是全网最详细的Hive日期函数介绍~
返回数值类型 | 函数名\所需参数\参数数据类型 | 描述 |
---|---|---|
bigint |
unix_timestamp() |
获取该机器的当前时间戳 |
bigint |
unix_timestamp(string date) |
将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳 |
bigint |
unix_timestamp(string date, string pattern) | 将时间字符串按指定格式转换成Unix时间戳 |
string | from_unixtime(bigint unixtime[, string format]) | 将时间戳的秒值转换成format格式 |
string |
to_date(string timestamp) | 返回时间字符串的日期部分。 |
int | year(string date) | 返回时间字符串的年 |
int | month(string date) | 返回时间字符串的月 |
int | day(string date) | 返回时间字符串的日 |
int | hour(string date) | 返回时间字符串的时 |
int | minute(string date) | 返回时间字符串的分 |
int | second(string date) | 返回时间字符串的秒 |
int |
weekofyear(string date) | 返回时间字符串位于一年中的第几个周内 如weekofyear("2019-07-12 00:00:00") = 28, weekofyear("2019-07-12") = 28 |
int | datediff(string enddate, string startdate) | 返回开始时间startdate到结束时间enddate相差的天数 |
string | date_add(string startdate, int days) | 返回从开始时间startdate加上days后的日期 |
string |
date_sub(string startdate, int days) | 返回从开始时间startdate减去days后的日期 |
date | current_date | 返回当前时间日期,比如:2019-07-12(as of Hive 1.2.0) |
string |
add_months(string startdate, int num_months) | 返回startdate再增加num_months个月的日期 |
string |
last_day(string date) | 返回这个月的最后一天的日期(as of Hive 1.1.0) |
string | next_day(string startdate, string day_of_week) | 返回当前时间的下一个星期X所对应的日期(as of Hive1.2.0) |
string |
trunc(string date, string format) | 返回date的当年或当月的第一天的日期 (as of Hive 1.2.0) |
double | months_between(date1, date2) | 返回date1与date2之间相差的月份,如date1>date2,则返回正,如果date1 |
string |
date_format(timestamp/string ts, string fmt) | 按指定格式返回时间date 如:date_format("2019-07-12","MM-dd")=07-12 (as of Hive 1.2.0) |
unix_timestamp()
功能:返回该机器的当前时间戳。
举例:
hive (app)> select unix_timestamp();
1561224376
unix_timestamp(string date)
功能:将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成时间戳。
举例:
hive (app)> select unix_timestamp('2019-07-12 22:00:00');
1562940000
不符合yyyy-MM-dd HH:mm:ss的格式会返回NULL
hive (app)> select unix_timestamp('2019-07-12');
NULL
unix_timestamp(string date, string pattern)
功能:将时间字符串按指定格式转换成Unix时间戳。
pattern的格式可为“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,“yyyy-MM”,“yyyy”等 。
举例:
输入年,返回2019-01-01 00:00:00的秒时间戳
hive (app)> select unix_timestamp('2019','yyyy');
1546272000
输入年月,返回2019-07-01 00:00:00的秒时间戳,注意月必须用大写的MM,否则7会分配到分钟上。
hive (app)> select unix_timestamp('2019-07','yyyy-MM');
1561910400
输入年月日,返回2019-07-12 00:00:00的秒时间戳
hive (app)> select unix_timestamp('2019-07-12','yyyy-MM-dd');
1562860800
输入年月日 时,返回2019-07-12 22:00:00的秒时间戳
hive (app)> select unix_timestamp('2019-07-12 22','yyyy-MM-dd hh');
1562940000
输入年月日 时分,返回2019-07-12 22:30:00的秒时间戳
hive (app)> select unix_timestamp('2019-07-12 22:30','yyyy-MM-dd hh:mm');
1562941800
输入年月日 时分秒,返回2019-07-12 22:30:30的秒时间戳
hive (app)> select unix_timestamp('2019-07-12 22:30:30','yyyy-MM-dd hh:mm:ss');
1562941830
如果输入的date内容比后边设定的格式少,返回NULL
hive (app)> select unix_timestamp('2019-07-12','yyyy-MM-dd hh:mm:ss');
NULL
如果输入的date内容比后边设定的格式多,返回设定的格式的时间戳,这里返回的是2019-07-12 00:00:00
hive (app)> select unix_timestamp('2019-07-12 22:30:30','yyyy-MM-dd');
1562860800
from_unixtime(bigint unixtime[, string format])
功能:unixtime传入秒值的时间戳。
format可指定的日期展示格式,可由yyyy、MM、dd、hh、mm、ss 6个元素使用任何字符进行任意连接组合。format如果不填则默认返回yyyy-MM-dd hh:mm:ss格式的时间字符串。
举例:
format如果不填则默认返回yyyy-MM-dd hh:mm:ss格式的时间字符串:
hive (app)> select from_unixtime(1546272000);
2019-01-01 00:00:00
hive (app)> select from_unixtime(1546272000,'yyyy');
2019
hive (app)> select from_unixtime(1546272000,'yyyy-MM');
2019-01
hive (app)> select from_unixtime(1546272000,'yyyyMMdd');
20190101
hive (app)> select from_unixtime(1546272000,'yyyy/MM/dd hh');
2019/01/01 12
hive (app)> select from_unixtime(1546272000,'yyyy-MM-dd hh:mm');
2019-01-01 12:00
hive (app)> select from_unixtime(1546272000,'yyyy-MM-dd hh:mm:ss');
2019-01-01 12:00:00
to_date(string timestamp)
功能:timestamp传入秒值的时间戳,返回yyyy-MM-dd格式的日期时间字符串。
举例:
hive (app)> select to_date("1970-01-01 00:00:00");
1970-01-01
year(string date)
month(string date)
day(string date)
hour(string date)
minute(string date)
second(string date)
功能:分别返回时间戳字符串的年、月、日、时、分、秒。
date的格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,“yyyy-MM”,“yyyy”等。
举例:
返回时间戳字符串的年
hive (app)> select year('2019-09-09 12:12:12');
2019
返回时间戳字符串的年
hive (app)> select year('2019-09-09');
2019
返回时间戳字符串的月
hive (app)> select month('2019-09-09 12:12:12');
9
返回时间戳字符串的日
hive (app)> select day('2019-09-09 12:12:12');
9
返回时间戳字符串的时
hive (app)> select hour('2019-09-09 12:12:12');
12
返回时间戳字符串的分
hive (app)> select minute('2019-09-09 12:12:12');
12
返回时间戳字符串的秒
hive (app)> select second('2019-09-09 12:12:12');
12
weekofyear(string date)
功能:返回时间字符串位于一年中的第几个周内。
date的格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
举例:
hive (app)> select weekofyear('2019-07-12 00:00:00');
28
hive (app)> select weekofyear('2019-07-12');
28
hive (app)> select weekofyear('2019-07');
NULL
datediff(string enddate, string startdate)
功能:返回开始时间startdate到结束时间enddate相差的天数。
第一个参数为结束时间enddate,第二个参数为开始时间startdate,二者的格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
举例:
hive (app)> select datediff('2019-07-12','2019-07-01');
11
hive (app)> select datediff('2019-07-12 12:00:00','2019-07-01');
11
hive (app)> select datediff('2019-07-12 12:00:00','2019-07-01 9:00:00');
11
hive (app)> select datediff('2019-07','2019-07-01');
NULL
date_add(string startdate, int days)
date_sub(string startdate, int days)
功能:返回开始时间startdate加上或减去days后的日期时间(只包含年月日)。
第一个参数startdate为开始时间,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
第二个参数days是加减的天数。
举例:
hive (app)> select date_add('2019-07-12',2);
2019-07-14
hive (app)> select date_sub('2019-07-12',2);
2019-07-10
hive (app)> select date_sub('2019-07-12 12:00:00',2);
2019-07-10
hive (app)> select date_sub('2019-07',2);
NULL
current_date
功能:返回当前时间日期,格式为“yyyy-MM-dd”,只包含年月日。(Hive 1.2.0后才有)
举例:
hive (app)> select current_date;
2019-06-24
add_months(string startdate, int num_months)
功能:返回startdate再增加num_months个月的日期,返回值的格式为“yyyy-MM-dd”,只包含年月日。
第一个参数startdate为开始时间,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
第二个参数num_months为加减的月份数。当其为正整数时,增加相应月份;为负整数时,则减少相应月份。
举例:
hive (app)> select add_months('2019-07-12 12:00:00',2);
2019-09-12
hive (app)> select add_months('2019-07-12',2);
2019-09-12
hive (app)> select add_months('2019-07-12',-2);
2019-05-12
hive (app)> select add_months('2019-07',2);
NULL
last_day(string date)
功能:返回这个月的最后一天的日期(Hive 1.1.0后才有),返回值的格式为“yyyy-MM-dd”,只包含年月日。
参数date为时间字符串,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
举例:
hive (app)> select last_day('2019-07-12');
2019-07-31
hive (app)> select last_day('2019-07-12 12:00:00');
2019-07-31
hive (app)> select last_day('2019-07');
NULL
next_day(string startdate, string day_of_week)
功能:返回startdate的下一个星期X所对应的日期(Hive 1.2.0后才有),返回值的格式为“yyyy-MM-dd”,只包含年月日。
第一个参数startdate为时间字符串,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
第二个参数day_of_week格式可以有三种:
举例:
返回2019-07-12的下一个周一的日期
hive (app)> select next_day('2019-07-12 12:00:00','monday');
2019-07-15
hive (app)> select next_day('2019-07-12 12:00:00','mon');
2019-07-15
hive (app)> select next_day('2019-07-12 12:00:00','mo');
2019-07-15
trunc(string date, string format)
功能:返回date的当年或当月的第一天的日期(Hive 1.2.0后才有),返回值的格式为“yyyy-MM-dd”,只包含年月日。
第一个参数date为时间字符串,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。
第二个参数format所支持的格式:月份为MONTH/MON/MM, 年份为YEAR/YYYY/YY。
举例:
MM则返回当月的第一天日期
hive (app)> select trunc('2019-07-12 12:00:00','MM');
2019-07-01
hive (app)> select trunc('2019-07-12','MM');
2019-07-01
YY则返回当年的第一天日期
hive (app)> select trunc('2019-07-12 12:00:00','YY');
2019-01-01
hive (app)> select trunc('2019-07-12','YY');
2019-01-01
months_between(date1, date2)
功能:返回date1与date2之间相差的月份,如date1>date2,则返回正,如果date1 date1、date2为时间字符串,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。 举例: date_format(timestamp/string ts, string fmt) 功能:按指定格式返回时间date (Hive 1.2.0后才有),返回值是指定格式的时间字符串。 第一个参数ts为时间字符串,格式可以是“yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh:mm”,“yyyy-MM-dd hh”,“yyyy-MM-dd”,至少要包含年月日,否则会返回NULL。 第二个参数fmt为可指定的日期展示格式,可由yyyy、MM、dd、hh、mm、ss 6个元素使用任何字符进行任意连接组合。 举例: 能看到这里的同学,就右上角点个赞吧,3Q~2019-07-12 12:00:00和2019-07-11 01:00:00之间相隔0.04704301个月
hive (app)> select months_between('2019-07-12 12:00:00','2019-07-11 01:00:00');
0.04704301
hive (app)> select months_between('2019-07-12 12:00:00','2019-07-12 12:00:00');
0.0
hive (app)> select months_between('2019-07-12 12:00:00','2019-06-12 12:00:00');
1.0
hive (app)> select months_between('2019-07-12','2019-07-11');
0.03225806
hive (app)> select months_between('2019-08','2019-07');
NULL
2.14 按指定格式返回时间 date_format
hive (app)> select date_format('2019-07-12 12:00:00','yyyy/MM');
2019/07
hive (app)> select date_format('2019-07-12 12:00:00','yyyyMMdd');
20190712
hive (app)> select date_format('2019-07-12','yyyyMMdd');
20190712