如何在HIVE中将自定义时间转换为秒

时间:2019-03-04 18:53:43

标签: sql hive hiveql

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

我的输入:

        time
        2m3s
        10s
        12.2
        10

我的预期输出是

    time
    123
    10
    12.2
    10

如果值为2m3s(2分3秒),我需要转换为2 * 60 + 3秒。如果它是10秒钟,则表示它可以在几秒钟内拿到10,依此类推。

有人可以帮我在蜂巢中实现同样的目的吗

2 个答案:

答案 0 :(得分:1)

我认为这将满足您的要求

select (case when time like '%m%s'
             then cast(regexp_extract(time, '^[0-9]+') as decimal(10, 2)) * 60 +
                  cast(replace(regexp_extract(time, '[0-9]+s$'), 's', '') as decimal(10, 2), 1)
             when time like '%s'
                  cast(replace(regexp_extract(time, '[0-9]+s$'), 's', '') as decimal(10, 2), 1)
             else cast(regexp_extract(time, '[0-9]+s$') as decimal(10, 2))
        end) as seconds

答案 1 :(得分:1)

使用regexp_extractregexp。请注意,此查询仅处理所示的两种模式。您可能必须根据数据中的其他模式来扩展它。

select case when time regexp '^[0-9]+[mM][0-9]+[sS]$' 
            then regexp_extract(time,'(^[0-9]+)',1) * 60 + regexp_extract(time,'([0-9]+)[sS]$',1)  
            when time regexp '^[0-9]+[sS]$' then regexp_extract(time,'([0-9]+)[sS]$',1)
       else time end
from tbl