从字符串中提取一个值并将其作为值放在另一列中

Extract a value from a string and put it as calue in another column

我在 Impala 的一列中有一些字符串,例如

'class:104;teacher:ted;school:first;subclass:404'
'class:105;teacher:nick;subclass:650;students:400'

我想做一个

case when info like '%class%' then substr(info,6,3) end as class
case when info like '%subclass%' then **<Here to take the value of the subclass>** end as subclass

我该怎么做?如您所见,它不是为了与 substr()

一起使用的位置

我想你可以在这里使用 split_part()。

class - split_part(split_part(col, 'class:',2),';',1)
subclass - split_part(split_part(col, 'subclass:',2),';',1)

内部拆分将拆分 class 个单词并取第二部分 ('104;teacher:ted;school:first;subclass:404')。然后最外面的分裂部分将分裂;并拿起第一部分 (104)。

你的 SQL 应该是 -

SELECT 
split_part(split_part(col, 'class:',2),';',1) as `class`,
split_part(split_part(col, 'subclass:',2),';',1) as `subclass`
FROM mytab