我有一个名为 geo_data_display 的字段,其中包含国家/地区、地区和 DMA。这 3 个值包含在 = 和 & 字符之间 - 第一个“=”和第一个“&”之间的国家/地区、第二个“=”和第二个“&”之间的区域以及第三个“=”和第三个“”之间的 DMA &”。这是该表的可重复版本。国家/地区始终是字符,但区域和 DMA 可以是数字或字符,并且并非所有国家/地区都存在 DMA。
一些示例值是:
country=us®ion=tx&dma=625&domain=abc.net&zipcodes=76549
country=us®ion=ca&dma=803&domain=abc.com&zipcodes=90404
country=tw®ion=hsz&domain=hinet.net&zipcodes=300
country=jp®ion=1&dma=a&domain=hinet.net&zipcodes=300
我有一些示例 SQL,但 geo_dma 代码行根本不起作用,并且 geo_region 代码行仅适用于字符值
SELECT
UPPER(REGEXP_REPLACE(split(geo_data_display, '\\&')[0], 'country=', '')) AS geo_country
,UPPER(split(split(geo_data_display, '\\&')[1],'\\=')[1]) AS geo_region
,split(split(cast(geo_data_display as int), '\\&')[2],'\\=')[2] AS geo_dma
FROM mytable
您可以使用str_to_map
像这样:
select geo_map['country'] as geo_country
,geo_map['region'] as geo_region
,geo_map['dma'] as geo_dma
from (select str_to_map(geo_data_display,'&','=') as geo_map
from mytable
) t
;
+--------------+-------------+----------+
| geo_country | geo_region | geo_dma |
+--------------+-------------+----------+
| us | tx | 625 |
| us | ca | 803 |
| tw | hsz | NULL |
| jp | 1 | a |
+--------------+-------------+----------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)