【问题标题】:Extracting data from string - SQL从字符串中提取数据 - SQL
【发布时间】:2021-08-07 10:42:40
【问题描述】:

在 BigQuery 中,我有一个表,其中有一列生成类似于下面提供的长字符串值。字符串有两个主要部分:cust_no 和 comp_no。每个部分都包含一个“值”和“updated_at_ms”。我正在尝试将 cust_no 和 comp_no 与它们的“值”提取为两个新列。 “Updated_at_ms”不是必需的。

{"$cust_no": {"value": "90164F59-1120-4F2B-811D-7FEDE3CEF701", "updated_at_ms": 1600301818327}, "$comp_no": {"value": "1548715734691-5404642", "updated_at_ms": 1600301818327}}

有谁知道我怎么做这个提取?任何帮助表示赞赏。提前谢谢你。

【问题讨论】:

    标签: sql google-bigquery data-cleaning


    【解决方案1】:

    使用json_value:

    with mytable as (
      select '{"$cust_no": {"value": "90164F59-1120-4F2B-811D-7FEDE3CEF701", "updated_at_ms": 1600301818327}, "$comp_no": {"value": "1548715734691-5404642", "updated_at_ms": 1600301818327}}' as col
    )
    select
      json_value(col, '$."$cust_no".value'),
      json_value(col, '$."$comp_no".value'),
    from mytable
    

    【讨论】:

      【解决方案2】:

      很抱歉没有完整的答案。

      如果我理解正确,您想从单列中提取“好的部分”。

      一个方向是使用patindex 或者substring

      SELECT SUBSTRING(MyCol, (PATINDEX('%"$cust_no": {"value": "%',[MyCol])),length)
      

      长度是用 ", "updated_at_ms" 的 PATINDEX 或类似的东西计算出来的

      示例来自这里:SQL Server String extract based on pattern

      substring API:SUBSTRING(string, start, length)

      patIndex API:PATINDEX(%pattern%, string)

      计算长度方向:substring of variable length

      【讨论】:

        猜你喜欢
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2019-05-21
        • 2021-12-08
        • 2019-08-06
        相关资源
        最近更新 更多