【问题标题】:How to grab certain value found in a string column?如何获取在字符串列中找到的某个值?
【发布时间】:2021-12-31 05:25:58
【问题描述】:

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

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

select value.id
from TBL_A

上述方法不起作用,因为这不是 json。

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

【问题讨论】:

    标签: sql snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

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

    select parse_json(VALUE);
    

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

    select parse_json(VALUE):id::string
    

    【讨论】:

      【解决方案2】:

      我会选择 Greg 将其视为 JSON 的选项,因为它确实看起来像 JSON,但如果您知道在某些情况下它绝对不是 JSON,您可以使用 SPLIT_TO_TABLETRIM,如果您知道, 不在任何字符串中

      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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 2020-03-13
        • 1970-01-01
        • 1970-01-01
        • 2016-03-06
        相关资源
        最近更新 更多