我在2017年9月1日下午2:00作为actualshipdate在表中的日期我希望将其转换为01-09-2017在hive中我尝试使用以下命令但显示null select actualshipdate,from_unixtime(unix_timestamp(substr(actualshipdate) ,0,11),' dd-mm-yyyy'))作为tablename的newdate;
答案 0 :(得分:0)
使用unix_timestamp(string date, string pattern)
将指定日期格式转换为1970-01-01传递的秒数。然后使用from_unixtime()
转换为给定格式:
hive> select from_unixtime(unix_timestamp('Sep 1 2017 2:00 PM' ,'MMM dd yyyy HH:mm a'), 'dd-MM-yyyy');
OK
01-09-2017
Time taken: 0.049 seconds, Fetched: 1 row(s)
请参阅此处的模式示例:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
答案 1 :(得分:-3)
您使用的功能正确,但参数错误。参数应为 unix_timestamp(datestring,date_format);此函数将日期转换为unix日期格式,您可以使用 from_unixtime(unixdateformat,format_youneed)进一步格式化;
hive> select unix_timestamp('Sep 1 2017 2:00 PM' ,'MMM dd yyyy HH:mm a');
OK
1504256400
您需要特定的日期模式,您可以使用功能
from_unixtime(unixdateformat,format_youneed);
hive> select from_unixtime(1504256400,'dd-MM-yyyy');
OK
01-09-2017
hive> select from_unixtime(UNIX_TIMESTAMP('Sep 1 2017 2:00 PM','MMM dd yyyy
HH:mm a'), 'dd-MM-yyyy');
OK
01-09-2017
Time taken: 0.135 seconds, Fetched: 1 row(s)
由于您在表格中的actualdate中存储了日期,因此可以使用以下命令获取结果。
**hive> select from_unixtime(UNIX_TIMESTAMP(actualshipdate,'MMM dd yyyy HH:mm a'), 'dd-MM-yyyy') from tablename;**