Hive 日期函数详解目录及详细说明,按功能分类并编号,方便查阅。
📑 目录
一、获取当前时间
- 1.1
current_date - 1.2
current_timestamp
二、日期加减运算
- 2.1
date_add - 2.2
date_sub - 2.3
add_months - 2.4
last_day - 2.5
next_day
三、日期差值计算
- 3.1
datediff - 3.2
months_between
四、提取日期/时间部分
- 4.1
year - 4.2
month - 4.3
day/dayofmonth - 4.4
hour - 4.5
minute - 4.6
second - 4.7
quarter - 4.8
weekofyear - 4.9
dayofweek
五、日期格式化与类型转换
- 5.1
date_format - 5.2
to_date - 5.3
cast(转换为日期) - 5.4
unix_timestamp - 5.5
from_unixtime
六、时区转换
- 6.1
to_utc_timestamp - 6.2
from_utc_timestamp
七、日期截断 / 特殊操作
- 7.1
trunc - 7.2
date_part
详细说明
一、获取当前时间
1.1 current_date
-
语法 :
current_date() -
返回值 :
DATE -
说明 :返回查询执行时的当前日期(
yyyy-MM-dd)。 -
示例 :
sqlSELECT current_date(); -- 2026-04-13
1.2 current_timestamp
-
语法 :
current_timestamp() -
返回值 :
TIMESTAMP -
说明:返回当前时间戳,精确到毫秒。
-
示例 :
sqlSELECT current_timestamp(); -- 2026-04-13 15:30:45.123
二、日期加减运算
2.1 date_add
-
语法 :
date_add(date, days) -
参数 :
date(DATE/STRING),days(INT) -
返回值 :
DATE -
说明 :给指定日期加上
days天(可为负数)。 -
示例 :
sqlSELECT date_add('2026-04-13', 5); -- 2026-04-18 SELECT date_add('2026-04-13', -3); -- 2026-04-10
2.2 date_sub
-
语法 :
date_sub(date, days) -
返回值 :
DATE -
说明 :减去
days天(相当于date_add(date, -days))。 -
示例 :
sqlSELECT date_sub('2026-04-13', 5); -- 2026-04-08
2.3 add_months
-
语法 :
add_months(date, months) -
返回值 :
DATE -
说明 :增加
months个月,处理月末逻辑(如1月31日加1个月得到2月28日)。 -
示例 :
sqlSELECT add_months('2026-01-31', 1); -- 2026-02-28
2.4 last_day
-
语法 :
last_day(date) -
返回值 :
DATE -
说明:返回该日期所在月份的最后一天。
-
示例 :
sqlSELECT last_day('2026-04-13'); -- 2026-04-30
2.5 next_day
-
语法 :
next_day(date, dow) -
参数 :
dow为星期几(如 'Monday', 'Tue', 'Friday' 等) -
返回值 :
DATE -
说明:返回指定日期后下一个星期几的日期。
-
示例 :
sqlSELECT next_day('2026-04-13', 'Friday'); -- 2026-04-17
三、日期差值计算
3.1 datediff
-
语法 :
datediff(enddate, startdate) -
返回值 :
INT -
说明 :返回
enddate - startdate的天数。 -
示例 :
sqlSELECT datediff('2026-04-13', '2026-04-01'); -- 12
3.2 months_between
-
语法 :
months_between(date1, date2) -
返回值 :
DOUBLE -
说明 :返回
date1 - date2的月数(可能带小数)。 -
示例 :
sqlSELECT months_between('2026-04-13', '2026-01-01'); -- 3.387...
四、提取日期/时间部分
4.1 year
- 语法 :
year(date) - 返回值 :
INT - 示例 :
SELECT year('2026-04-13');→2026
4.2 month
- 返回值 :
INT(1~12) - 示例 :
SELECT month('2026-04-13');→4
4.3 day / dayofmonth
- 返回值 :
INT(1~31) - 示例 :
SELECT day('2026-04-13');→13
4.4 hour
- 语法 :
hour(timestamp) - 示例 :
SELECT hour('2026-04-13 15:30:00');→15
4.5 minute
- 示例 :
SELECT minute('2026-04-13 15:30:00');→30
4.6 second
- 示例 :
SELECT second('2026-04-13 15:30:45');→45
4.7 quarter
- 返回值 :
INT(1~4) - 示例 :
SELECT quarter('2026-04-13');→2
4.8 weekofyear
- 返回值 :
INT(1~53) - 示例 :
SELECT weekofyear('2026-04-13');→16
4.9 dayofweek
- 返回值 :
INT(1=星期一, 7=星期日) - 示例 :
SELECT dayofweek('2026-04-13');→1
五、日期格式化与类型转换
5.1 date_format
-
语法 :
date_format(date, pattern) -
返回值 :
STRING -
说明 :使用 Java
SimpleDateFormat模式将日期转为字符串。 -
示例 :
sqlSELECT date_format('2026-04-13', 'yyyy年MM月dd日'); -- 2026年04月13日
5.2 to_date
-
语法 :
to_date(string) -
返回值 :
DATE -
说明 :将日期时间字符串的日期部分提取为
DATE类型。 -
示例 :
sqlSELECT to_date('2026-04-13 15:30:00'); -- 2026-04-13
5.3 cast
-
语法 :
cast(string as date) -
返回值 :
DATE -
说明 :仅当字符串为
yyyy-MM-dd格式时有效。 -
示例 :
sqlSELECT cast('2026-04-13' as date);
5.4 unix_timestamp
-
语法 :
unix_timestamp([date[, pattern]]) -
返回值 :
BIGINT -
说明:将日期字符串转为 Unix 时间戳(秒)。无参数时返回当前时间戳。
-
示例 :
sqlSELECT unix_timestamp('2026-04-13 15:30:00', 'yyyy-MM-dd HH:mm:ss');
5.5 from_unixtime
-
语法 :
from_unixtime(unixtime[, pattern]) -
返回值 :
STRING -
说明 :将 Unix 时间戳转为指定格式的字符串(默认
yyyy-MM-dd HH:mm:ss)。 -
示例 :
sqlSELECT from_unixtime(1713000000, 'yyyy-MM-dd');
六、时区转换
6.1 to_utc_timestamp
-
语法 :
to_utc_timestamp(timestamp, timezone) -
返回值 :
TIMESTAMP -
说明:将给定时区的时间戳转为 UTC 时间戳。
-
示例 :
sqlSELECT to_utc_timestamp('2026-04-13 15:30:00', 'Asia/Shanghai');
6.2 from_utc_timestamp
-
语法 :
from_utc_timestamp(timestamp, timezone) -
返回值 :
TIMESTAMP -
说明:将 UTC 时间戳转为指定时区的时间戳。
-
示例 :
sqlSELECT from_utc_timestamp('2026-04-13 07:30:00', 'Asia/Shanghai');
七、日期截断 / 特殊操作
7.1 trunc
-
语法 :
trunc(date, format) -
返回值 :
DATE -
说明 :将日期截断到指定单位。
format可选'YY'、'MM'、'DD'等。 -
示例 :
sqlSELECT trunc('2026-04-13', 'MM'); -- 2026-04-01 (当月第一天)
7.2 date_part
-
语法 :
date_part(field, source) -
返回值 :
INT -
说明 :SQL 标准函数,提取
field(如 'year', 'month', 'day', 'hour' 等)的值。 -
示例 :
sqlSELECT date_part('year', '2026-04-13'); -- 2026
⚠️ 重要注意事项
- 输入格式 :多数函数要求日期字符串为
yyyy-MM-dd格式,否则返回NULL。可使用unix_timestamp(...)+from_unixtime(...)进行格式转换。 - NULL 处理 :任何参数为
NULL时,结果均为NULL。 - 时区 :
TIMESTAMP类型默认 UTC 时区;unix_timestamp/from_unixtime受hive.local.time.zone影响。 - 版本差异 :Hive 3.0 之前
to_date返回STRING,之后返回DATE。