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格式)
Letter | Date or Time Component | Presentation | Examples |
---|---|---|---|
G | Era designator | Text | AD |
y | Year | Year | 1996 ; 96 |
Y | Week year | Year | 2009 ; 09 |
M | Month in year | Month | July ; Jul ; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day name in week | Text | Tuesday ; Tue |
u | Day number of week (1 = Monday, ..., 7 = Sunday) | Number | 1 |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
Z | Time zone | RFC 822 time zone | -0800 |
X | Time zone | ISO 8601 time zone | -08 ; -0800 ; -08:00 |