Hive 日期处理函数汇总
最近项目处理日期操作比较繁杂,使用Hive的日期函数也较频繁
1. 加减日期
-
date_add('日期字符串',int值) :把一个字符串日期格式加n天,n为int值
select date_add('2023-12-31',7);
结果:
2024-01-07
-
date_sub('日期字符串',int值) :把一个字符串日期格式减n天,n为int值
select date_sub('2024-01-2',7);
结果:
2023-12-26
2. 时间戳/格式化日期字符串互相转换,格式化日期
-
from_unixtime(时间戳,'pattern') : 从
时间戳
转格式化日期字符串
.'pattern'是日期格式化模式字符串hive> select from_unixtime(1704788052,'yyyy-MM-dd HH:dd:ss');
结果:
2024-01-09 16:09:12
-
unix_timestamp('日期字符串','pattern') :从
格式化日期字符串
转时间戳
.select unix_timestamp('2023/11/22','yyyy/MM/dd');
结果:
1700582400
-
date_format('日期字符串','pattern') : 把一个字符串日期格式化为指定的格式,日期字符串必须满足yyyy-MM-dd格式
hive> select date_format('2023-11-22','yyyy-MM-dd HH:mm:ss');
结果:
2023-11-22 00:00:00
3. 获取当前时间
-
current_date() : 获取当前的日期的字符串
hive>select current_date();
结果:
2024-01-09
-
current_timestamp() : 获取当前时间字符串,格式为 'yyyy-MM-dd HH:mm:ss.SS'
hive> select current_date();
结果:
2024-01-09 16:12:03.339
-
unix_timestamp(): 获取当前时间戳
注:
unix_timestamp(void) is deprecated. Use current_timestamp instead.
hive> select unix_timestamp();
结果:
1704788052
10.实战
给定一个表的一列dt_plantdate,该列为'yyyy-MM-dd HH:mm:ss'格式的日期字符串,将该列减14天,结果仍需要保证
'yyyy-MM-dd HH:mm:ss'格式
由于date_sub处理粒度只到yyyy-MM-dd,所以我们不使用date_sub()相减,
而是先统一转为时间戳后相减,处理完再转为字符串
sql
SELECT
from_unixtime(
unix_timestamp('2024-01-09 16:12:03', 'yyyy-MM-dd HH:mm:ss') - 14 * 24 * 60 * 60,
'yyyy-MM-dd HH:mm:ss'
) AS modified_date
FROM
your_table;
from_unixtime 里,我们直接时间戳数值相减后再转为标准格式字符串