如何获取在字符串列中找到的特定值?

How to grab certain value found in a string column?

我有一列包含几个不同的值。这是 而不是 JSON 格式。它是一个字符串,分为不同的部分。我只需要抓取在 ID 下找到的所有内容。

在下面的例子中,我只想抓取单词:“syntax”和“village”

select value.id
from TBL_A

以上内容无效,因为这不是 json。

有谁知道如何获取在该字符串列的“id”部分下找到的完整单词?

即使它是一个字符串,因为它的格式正确 JSON 您可以将字符串转换为 JSON 变体,如下所示:

select parse_json(VALUE);

然后您可以使用标准冒号和点表示法访问其属性:

select parse_json(VALUE):id::string

我会同意 Greg 的选择,将其视为 JSON,因为它确实看起来像 JSON,但如果您知道在某些情况下它肯定不是 JSON,你可以使用 SPLIT_TO_TABLE, and TRIM,如果你知道 , 不在任何字符串中

SELECT t.value,
    TRIM(t.value,'{}') as trim_value,
    s.value as s_value,
    split_part(s_value, ':', 1) as token,
    split_part(s_value, ':', 2) as val,
FROM table t
    ,LATERAL SPLIT_TO_TABLE(trim_value, ',') s

可以将其压缩,使用 QUALIFY 过滤以获得您想要的行:

SELECT 
    SPLIT_PART(s.value, ':', 2) AS val,
FROM table t
    ,LATERAL SPLIT_TO_TABLE(TRIM(t.value,'{}'), ',') s
QUALIFTY SPLIT_PART(s.value, ':', 1) = 'id'