我是sql / hive的新手。首先,我使用以下命令将一个txt文件加载到配置单元中:
drop table if exists Tran_data;
create table Tran_data(tran_time string,
resort string, settled double)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
Load data local inpath 'C:\Users\me\Documents\transaction_data.txt' into table Tran_Data;
txt文件中的变量tran_time
如下所示:10-APR-2014 15:01。加载此Tran_data表后,我尝试将tran_time
转换为“标准”格式,以便我可以使用tran_time
作为join
键将此表连接到另一个表。所需的日期格式为'yyyymmdd'。我搜索了在线资源,发现了这个:unix_timestamp(substr(tran_time,1,11),'dd-MMM-yyyy')
基本上,我这样做:unix_timestamp('10-APR-2014','dd-MMM-yyyy')
。但是,输出为“NULL”。
所以我的问题是:如何将日期格式转换为“标准”格式,然后进一步将其转换为'yyyymmdd'格式?
答案 0 :(得分:17)
from_unixtime(unix_timestamp('20150101' ,'yyyyMMdd'), 'yyyy-MM-dd')
答案 1 :(得分:3)
我目前的Hive版本:Hive 0.12.0-cdh5.1.5
我使用下面的配置日期函数将第一列中的日期时间转换为第二列中的日期。希望这有帮助!
select inp_dt, from_unixtime(unix_timestamp(substr(inp_dt,0,11),'dd-MMM-yyyy')) as todateformat from table;
inp_dt todateformat
2015年3月12日07:24:55 2015-03-12 00:00:00
答案 2 :(得分:1)
select from_unixtime(unix_timestamp('01032018' ,'MMddyyyy'), 'yyyyMMdd');
输入格式:mmddyyyy
01032018
查询后输出:yyyymmdd
20180103
答案 3 :(得分:1)
为了将来帮助某人:
以下功能应该在我的情况下起作用
TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP(' 10-APR-2014',' DD-MMM-YYYY'))
答案 4 :(得分:0)
unix_timestamp函数会将给定的字符串日期格式转换为unix时间戳,以秒为单位,但不像这种格式dd-mm-yyyy。
您需要编写自己的自定义udf,以将给定的字符串日期转换为您需要的格式,因为Hive没有任何预定义的函数。我们有to_date函数将时间戳转换为日期,剩下的所有unix_timestamp函数都不会帮助你解决问题。
答案 5 :(得分:0)
unix_timestamp(' 2014-05-01',' dd-mmm-yyyy')将正常工作,您的输入字符串应为hive yyyy-mm-dd的格式或yyyy-mm-dd hh:mm:ss
您正在尝试的地方' 01-MAY-2014' hive不会将其理解为日期字符串