我正在使用Hive 1.2.1000。我实际上正在处理转换为unix时间戳。我正在尝试使用格式转换日期:
dd / mm / yyyy hh:mm:ss
到unix_timestamp,因此:
unix_timestamp(日期,“dd-mm-yyyy hh:mm:ss”)
被用过。
更确切地说,我运行了以下代码:
选择'09 / 06/2012 04:02:32',regexp_replace('09 / 06/2012 04:02:32',“/”,“ - ”)
这似乎工作,实际上结果是:1326081752
我还注意到我有N个不同的日期,这些日期的unix_timestamp上的不同是M,M <N。
对数据进行一些操作我已经看到有不同的日期具有相同的unix_timestamp。
因此,我试图更深入,例如,我发现了很多日期
09/06/2012 04:02:32
和
09/12/2012 04:02:32
现在,如果我尝试运行以下代码:
select
'09/06/2012 04:02:32',
regexp_replace('09/06/2012 04:02:32',"/","-"),
unix_timestamp(regexp_replace('09/06/2012 04:02:32',"/","-"),"dd-mm-yyyy hh:mm:ss"),
unix_timestamp('09-06-2012 04:02:32',"dd-mm-yyyy hh:mm:ss")
UNION ALL
select '09/12/2012 04:02:32',
regexp_replace('09/12/2012 04:02:32',"/","-"),
unix_timestamp(regexp_replace('09/12/2012 04:02:32',"/","-"),"dd-mm-yyyy hh:mm:ss"),
unix_timestamp('09-12-2012 04:02:32',"dd-mm-yyyy hh:mm:ss")
这是输出:
09/06/2012 04:02:32 09-06-2012 04:02:32 1326081752 1326081752 1326081752
09/12/2012 04:02:32 09-12-2012 04:02:32 1326081752 1326081752 1326081752
这显然是一样的。
除了dd和mm之间的所有日期之外,所有日期相同的日期都可以扩展此结果。
你能解释一下为什么吗?
提前谢谢,曼努埃尔
PS。我也尝试过使用其他格式的日期,例如:
select '2012-06-09 04:02:32', unix_timestamp(regexp_replace('2012-06-09 04:02:32',"/","-"),"yyyy-mm-dd hh:mm:ss")
UNION ALL
select '2012-12-09 04:02:32', unix_timestamp(regexp_replace('2012-12-09 04:02:32',"/","-"),"yyyy-mm-dd hh:mm:ss")
但结果是一样的。
问题是mm代表分钟。
dd-MM-yyyy hh:mm:ss
代替
dd-mm-yyyy hh:mm:ss
是解决问题的方法。