我正在寻找解决方案。我的问题是,我想将数据转换为秒。我的HIVE表中的数据如下:
我的输入:
time
2m3s
10s
12.2
10
我的预期输出是
time
123
10
12.2
10
如果值为2m3s(2分3秒),我需要转换为2 * 60 + 3秒。如果它是10秒钟,则表示它可以在几秒钟内拿到10,依此类推。
有人可以帮我在蜂巢中实现同样的目的吗
答案 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_extract
和regexp
。请注意,此查询仅处理所示的两种模式。您可能必须根据数据中的其他模式来扩展它。
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