Hive的时间操作函数

from_unixtime

功能: UNIX时间戳转日期函数: 

语法:   from_unixtime(bigint unixtime[, string format])

返回值: string

说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式

举例

select from_unixtime(1323308943,'yyyyMMdd'); #结果 20111208

unix_timestamp

功能:获取当前UNIX时间戳函数:

语法1:   unix_timestamp()

返回值:   bigint

说明: 获得当前时区的UNIX时间戳

举例:

select unix_timestamp();  #结果样例 1608016076

语法2:   unix_timestamp(string date)

返回值:   bigint

说明: 转换格式为“yyyy-MM-dd HH:mm:ss“的日期到UNIX时间戳。如果转化失败,则返回0。

举例:

 select unix_timestamp('2011-12-07 13:01:03'); #结果 1323234063

语法3:   unix_timestamp(string date, string pattern)

作用:指定pattern格式日期转UNIX时间戳函数:

返回值:   bigint

说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。

举例:

select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss'); # 1323234063

to_date

作用:日期时间转日期函数

语法:   to_date(string timestamp)

返回值:   string

说明: 返回日期时间字段中的日期部分。

举例

select to_date('2011-12-08 10:03:01'); # 2011-12-08

current_date

作用:获取当前日期

语法:   current_date()

返回值:   string

说明: 获取当前日期。

举例

select current_date(); # 2020-12-08

current_timestamp

作用:获取当前时间

语法:   current_timestamp()

返回值:   string

说明: 获取当前日期。

举例

select current_timestamp(); # 2020-12-08 11:47:53.735

date_format

作用:格式化时间

语法:   date_format(date_time, format)

返回值:   string

说明: 返回格式化后的时间。

select date_format('2015-04-08', 'y');
2015
select date_format('2015-04-08', 'yyyy');
2015
select date_format('2015-04-08', 'yyyy-MM');
2015-04
select date_format('2015-04-08 10:10:01', 'yyyy-MM');
2015-04
select date_format('2015-04-08', 'yyyy-MM-dd');
2015-04-08

注意:  date_format函数如果第一个参数是字符串,连接符只能是-,别的识别不了

select date_format('2015/04/08', 'y');
--null,识别不了/ 这种分隔符
select date_format(regexp_replace('2015/04/08', '/', '-'), 'y');
--2015
select date_format(regexp_replace('2015/04/08', '/', '-'), 'y-MM');
--2015-04 如果有些时候需要按月聚合就需要这么搞
select month('2015/04/08');
--null 无法识别
select month(regexp_replace('2015/04/08', '/', '-'));
-- 4 可以

year

作用:日期转年函数: 

语法:   year(string date)

返回值: int

说明: 返回日期中的年。

举例

select year('2011-12-08 10:03:01'); # 2011


select year('2012-12-08'); # 2012

month

作用:日期转月函数

语法: month(string date)

返回值: int

说明: 返回日期中的月份。

举例

select month('2011-12-08 10:03:01');

12

select month('2011-08-08');

8

 day

作用:日期转天函数: 

语法:  day(string date)

返回值: int

说明: 返回日期中的天。

举例

select day('2011-12-08 10:03:01');

8

select day('2011-12-24');

24

hour

作用:日期转小时函数

语法: hour(string date)

返回值: int

说明: 返回日期中的小时。

举例

select hour('2011-12-08 10:03:01');

10

minute

作用:日期转分钟函数

语法: minute(string date)

返回值: int

说明: 返回日期中的分钟。

举例

select minute('2011-12-08 10:03:01');

3

second

作用:日期转秒函数:

语法: second(string date)

返回值: int

说明: 返回日期中的秒。

举例

select second('2011-12-08 10:03:01');

1

weekofyear

作用:日期转周函数

语法:   weekofyear(string date)

返回值: int

说明: 返回日期在当前的周数。

举例

select weekofyear('2011-12-08 10:03:01');

49

dayofyear

作用:日期转天函数

语法:   dayofyear(string date)

返回值: int

说明: 返回日期在所在年的第几天。

举例

# 貌似hive中不存在该函数
SELECT dayofyear('2016-04-09');

100

dayofmonth

作用:日期转天函数

语法:   dayofmonth(string date)

返回值: int

说明: 返回日期在所在月的第几天。

举例

SELECT dayofmonth('2009-07-30');

30

datediff

作用:日期比较函数:

语法:   datediff(string enddate, string startdate)

返回值: int

说明: 返回结束日期减去开始日期的天数。

举例

SELECT datediff('2020-11-30', '2020-07-31');

122

date_add

作用:日期增加函数

语法:   date_add(string startdate, int days)

返回值: string

说明: 返回开始日期startdate增加days天后的日期。

举例

SELECT date_add('2009-07-30', 10);

2009-08-09

date_sub 

作用:日期减少函数

语法:   date_sub(string startdate, int days)

返回值: string

说明: 返回开始日期startdate减少days天后的日期。

举例

SELECT date_sub('2009-07-30', 48);

2009-06-12

还有两个常用的时间函数,有时间再整理

next_day
last_day

附录

hive的时间格式表(用的是java的SimDateFormat格式)

LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear199696
YWeek yearYear200909
MMonth in yearMonthJulyJul07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesdayTue
uDay number of week (1 = Monday, ..., 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard TimePSTGMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08-0800-08:00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值