hive中 日期格式转化办法小记

本文介绍了在Hive中如何将日期格式从2014-11-10转换为20141110,以及反之亦然的方法。主要通过使用from_unixtime与unix_timestamp函数和substr+concat组合两种方式实现。此外,还提供了获取当前时间的Hive SQL语句。

hive中 日期格式转化办法:
2014-11-10 和 20141110相互转化的办法:
1.from_unixtime && unix_timestamp
-- 20141110
select from_unixtime(unix_timestamp('2014-11-10','yyyy-mm-dd'),'yyyymmdd') from default.dual;
-- 2014-11-10
select from_unixtime(unix_timestamp('20141110','yyyymmdd'),'yyyy-mm-dd') from default.dual;
2.substr + concat
-- 20141110
select concat(substr('2014-11-10',1,4),substr('2014-11-10',6,2),substr('2014-11-10',9,2)) from default.dual;
-- 2014-11-10
select concat(substr('20141110',1,4),'-',substr('20141110',5,2),'-',substr('20141110',7,2)) from default.dual;

 

附加:hive 获取当前时间

select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') from default.dual;

Hive中,日期格式转换后结果为1970通常是因为时间戳为0或者日期格式不匹配,以下是具体的原因和解决办法。 ### 原因 - **时间戳为0**:当输入的日期值为空或者无效时,Hive可能会将其解析为时间戳0,而时间戳0对应的日期就是1970年1月1日。例如,输入的日期字段是`NULL`,或者包含非日期字符,在转换时就可能出现这种情况。 - **日期格式不匹配**:使用`from_unixtime`或`unix_timestamp`等函数进行日期格式转换时,如果指定的日期格式与实际输入的日期格式不一致,Hive无法正确解析日期,从而导致转换结果为1970年。比如,实际日期格式是`yyyy-MM-dd`,但在函数中指定的格式是`yyyy/MM/dd`。 ### 解决办法 - **处理空值或无效值**:在进行日期格式转换之前,先对输入的日期值进行检查和处理,过滤掉空值或无效值。可以使用`CASE WHEN`语句或者`COALESCE`函数来处理。 ```sql -- 使用CASE WHEN语句 SELECT CASE WHEN date_column IS NULL THEN NULL ELSE from_unixtime(unix_timestamp(date_column, 'yyyy-MM-dd'), 'yyyy-MM-dd') END AS converted_date FROM your_table; -- 使用COALESCE函数 SELECT from_unixtime(unix_timestamp(COALESCE(date_column, 'invalid_date'), 'yyyy-MM-dd'), 'yyyy-MM-dd') FROM your_table; ``` - **确保日期格式匹配**:在使用`unix_timestamp`和`from_unixtime`等函数时,要确保指定的日期格式与实际输入的日期格式一致。可以先查看数据的实际格式,然后根据实际情况调整函数中的日期格式参数。 ```sql -- 假设实际日期格式是yyyy-MM-dd SELECT from_unixtime(unix_timestamp(date_column, 'yyyy-MM-dd'), 'yyyy-MM-dd') FROM your_table; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值