从 Redshift 中的超类型获取值

问题描述 投票:0回答:1

在我的表中,我有名为 zip 的超级类型列。我认为列包含字典,它不是有效的 json。如何将值提取为单独的列。我的意思是 zip.zip4、zip.zip5

enter image description here

我尝试使用,

JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(zip), 'zip4')

但它不是有效的 JSON,首先我必须删除括号 [],但类型是 super 所以我不能这样做。

带有数据的代码:

with cte as(
select JSON_PARSE('[{"zip1":"07192","zip2":""}]') as zip
union all
select JSON_PARSE('[{"zip1":"09102","zip2":"53"}]') as zip
)
select * from cte;
json amazon-redshift extract supertype
1个回答
0
投票

首先,将数据作为图像发布是一种不好的形式。请不要这样做。

您的 JSON 完全有效。您只需将一个数组作为 JSON 的顶级元素即可。

只要这些数组始终只有 1 个元素,那么以下内容将解析该数据(根据您的示例代码)。引用此数据时请注意“[0]”,因为它索引这些数组的第一个元素。

with cte as(
select JSON_PARSE('[{"zip1":"07192","zip2":""}]') as zip
union all
select JSON_PARSE('[{"zip1":"09102","zip2":"53"}]') as zip
)
select zip[0]."zip1" as zip1, zip[0]."zip2" as zip2 from cte;
© www.soinside.com 2019 - 2024. All rights reserved.