我使用的是hive 1.2.1000。实际上,我正在处理到unix时间戳的转换。我正在尝试使用以下格式转换日期:
年/月/日hh:mm:ss
到unix\u时间戳,因此:
unix\u时间戳(日期,“dd-mm-yyyy hh:mm:ss”)
已经用过了。
更准确地说,我运行了以下代码:
选择'09/06/2012 04:02:32',regexp\u replace('09/06/2012 04:02:32',“/”,“-”)
这似乎奏效了,实际上结果是:1326081752
我还注意到我有n个不同的日期,这些日期的时间戳是m,m<n。
在对数据进行一些操作时,我看到有不同的日期具有相同的unix\u时间戳。
因此,我试着更深入地研究,例如,我发现了很多日期
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
显然是一样的。
这个结果可以扩展到除日和月之间的日期外所有日期都相同的所有日期。
你能解释一下为什么吗?
提前谢谢,曼纽尔
另外,我也尝试过使用其他格式的日期,例如:
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")
但结果是一样的。
1条答案
按热度按时间ssgvzors1#
问题是mm代表分钟。
日-月-年-时:分:秒
而不是
日-月-年-时:分:秒
是解决问题的办法。