在执行选择查询时,如何在Hive中将YYY-MM-DD HH:mm:ss中的时间戳转换为YYY-MM-DD HH:mm:ss.SSS?

时间:2019-12-30 08:58:29

标签: hive timestamp hiveql

我正在比较两个不同数据库引擎之间的时间戳列,我需要将以YYY-MM-DD HH:mm:ss格式存储的时间戳列恢复为YYY-MM-DD HH:mm:ss.SSS,,其中SSS000,否则条目在那里。

2 个答案:

答案 0 :(得分:1)

将时间戳拆分为毫秒部分,如果根本没有毫秒部分或毫秒部分少于3位,请使用rpad加上零。

演示:

 with your_data as (
    select stack(3, '2019-11-02 20:18:00.123',
                    '2019-11-02 20:18:00.12',
                    '2019-11-02 20:18:00'
                ) as ts
    )

 select concat(split(ts,'\\.')[0],'.',rpad(nvl(split(ts,'\\.')[1],''),3,0))
   from your_data d 
 ;

结果:

2019-11-02 20:18:00.123
2019-11-02 20:18:00.120
2019-11-02 20:18:00.000

答案 1 :(得分:0)

鉴于两种格式(及其长度)均已严格定义,因此可以使用以下简单逻辑:

left(concat(ts,'.000'),19)

无法检查确切的语法,但基本上,您会追加多余的零,并在不需要时将其切除。