如何转换日期

时间:2017-09-08 05:44:22

标签: hive hiveql

我在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;

2 个答案:

答案 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;**