将字符串转换为Hive中的时间戳

fer*_*cs2 8 hadoop hive hiveql

我的Hive表中有一个时间戳的以下字符串表示:

20130502081559999
Run Code Online (Sandbox Code Playgroud)

我需要将它转换为如下字符串:

2013-05-02 08:15:59
Run Code Online (Sandbox Code Playgroud)

我试过以下({code} >>> {result}):

from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmss')) >>> 2013-05-03 00:54:59
from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssMS')) >>> 2013-09-02 08:15:59
from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssMS')) >>> 2013-05-02 08:10:39
Run Code Online (Sandbox Code Playgroud)

转换为时间戳然后unixtime似乎很奇怪,这样做的正确方法是什么?

编辑 我明白了.

from_unixtime(unix_timestamp(substr('20130502081559999',1,14), 'yyyyMMddHHmmss')) >>> 2013-05-02 08:15:59
Run Code Online (Sandbox Code Playgroud)

要么

from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssSSS')) >>> 2013-05-02 08:15:59
Run Code Online (Sandbox Code Playgroud)

还是......还有更好的方法吗?

Luk*_*eer 8

看起来你的格式有三毫秒的数字.我猜想,根据SimpleDateFormat,你需要使用以下内容:

from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssSSS'))
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.


Pau*_*l M 4

不确定“更好的方式”是什么意思,但您始终可以编写自己的函数来处理日期转换。