【问题标题】:Hive String to Timestamp conversion with Milliseconds以毫秒为单位的 Hive 字符串到时间戳的转换
【发布时间】:2020-01-08 09:37:00
【问题描述】:

我需要转换上述输入字符串格式并在时间戳中生成所需的输出,如下所示。

输入: 16AUG2001:23:46:32.876086

所需输出: 2001-08-16 23:46:32.876086

运行以下代码得到的输出:2001-08-17 00:01:08

查询:

select '16AUG2001:23:46:32.876086' as row_ins_timestamp,
       from_unixtime(unix_timestamp('16AUG2001:23:46:32.876086',
                     'ddMMMyyyy:HH:mm:ss.SSSSSS')) as row_ins_timestamp
from temp;

毫秒部分未按要求进行转换。请提出建议。

【问题讨论】:

    标签: sql hive timestamp hiveql unix-timestamp


    【解决方案1】:

    unix_timestamp 函数不保存毫秒。 无毫秒转换,然后与毫秒部分连接:

    with your_data as (
    select stack(3,
    '16AUG2001:23:46:32.876086',
    '16AUG2001:23:46:32',
    '16AUG2001:23:46:32.123'
    ) as ts
    )
    
    select concat_ws('.',from_unixtime(unix_timestamp(split(ts,'\\.')[0],'ddMMMyyyy:HH:mm:ss')),split(ts,'\\.')[1]) 
      from your_data;
    

    结果:

    2001-08-16 23:46:32.876086
    2001-08-16 23:46:32
    2001-08-16 23:46:32.123
    Time taken: 0.089 seconds, Fetched: 3 row(s)
    

    【讨论】:

    • 亮了
    猜你喜欢
    • 2014-12-08
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2011-05-07
    • 2018-09-02
    • 2021-05-07
    • 2016-08-01
    相关资源
    最近更新 更多