如何在hive中将品种自定义时间戳转换为秒

Posted

技术标签:

【中文标题】如何在hive中将品种自定义时间戳转换为秒【英文标题】:how to convert the variety customized time stamp to second in hive 【发布时间】:2019-10-11 03:38:39 【问题描述】:

我正在为我的问题寻找解决方案。我的问题是我想将我的数据转换为秒。我的 HIVE 表中的数据如下所示:

我的意见:

1 Day 8 Hours 48 Minutes    
1 Hour 1 Minutes    
3 Hours 
20 Minutes
20 Minutes 4 Seconds
50 Seconds 

我的预期输出(秒)

118080
3660
10800
1200
1204
50

【问题讨论】:

【参考方案1】:

使用正则表达式,您可以在 case 语句中解析所有可能的模板。也许这可以优化,我希望你明白了。添加更多模板并像这样进行测试:

with mytable as(
select stack(6,
'1 Day 8 Hours 48 Minutes',    
'1 Hour 1 Minutes',   
'3 Hours', 
'20 Minutes',
'20 Minutes 4 Seconds',
'50 Seconds' 
) as mytimestamp 
)


select mytimestamp, ts[0]*86400  --days
                   +ts[1]*3600   --hours
                   +ts[2]*60     --minutes
                   +ts[3]        --seconds 
                   as seconds
from 
(
select mytimestamp, 
       split(
        case when mytimestamp rlike '^(\\d1,2)\\s(?:Days?)\\s(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$'                            --Days Hours Minutes
                 then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Days?)\\s(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$','$1:$2:$3:0')

            when mytimestamp rlike '^(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$'                                                     --Hours Minutes
                 then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$','0:$1:$2:0')

            when mytimestamp rlike '^(\\d1,2)\\s(?:Hours?)$'                                                                                 --Hours
                 then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Hours?)$','0:$1:0:0')

            when mytimestamp rlike '^(\\d1,2)\\s(?:Minutes?)$'                                                                               --Minutes
                 then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Minutes?)$','0:0:$1:0')

            when mytimestamp rlike '^(\\d1,2)\\s(?:Minutes?)\\s(\\d1,2)\\s(?:Seconds?)$'                                                   --Minutes Seconds
                 then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Minutes?)\\s(\\d1,2)\\s(?:Seconds?)$','0:0:$1:$2') 

            when mytimestamp rlike '^(\\d1,2)\\s(?:Seconds?)$'                                                                               --Seconds
                 then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Seconds?)$','0:0:0:$1')
         end,':') as ts
    from mytable
)s

返回:

mytimestamp                seconds  
1 Day 8 Hours 48 Minutes    118080  
1 Hour 1 Minutes            3660    
3 Hours                     10800   
20 Minutes                  1200    
20 Minutes 4 Seconds        1204    
50 Seconds                  50  

【讨论】:

以上是关于如何在hive中将品种自定义时间戳转换为秒的主要内容,如果未能解决你的问题,请参考以下文章

Hive日期格式转换详解(包含13位时间戳转毫秒时间)

js页面里时间戳转日期

如何用c++将一个时间点转换成时间戳

如何在 Oracle 中将日期截断为秒

时间戳以字符串类型(带有小数点)存储在hive里,现在要把时间戳字段转换成时间,要用啥函数,求转换!

如何在 hive 中将时间戳转换为 gmt 格式