【问题标题】:How to use json_extract in standard sql to get a value如何在标准 sql 中使用 json_extract 来获取值
【发布时间】:2021-09-27 06:25:40
【问题描述】:

如果该列具有如下值

[{"name": "my_name_1"}] [{"name": "my_name_2"}] [{"name": "my_name_3"}] [{"name": "my_name_4"}]

如何使用 json_extract 仅获取 my_name_1

我尝试了以下但没有工作JSON_EXTRACT_SCALAR(column_name,"$.name")

【问题讨论】:

  • 您使用的是哪个 dbms? (JSON_EXTRACT_SCALAR 不是 ANSI/ISO SQL 标准函数。)
  • 我正在使用 bigquery

标签: sql google-bigquery json-extract


【解决方案1】:

你可以试试OFFSET,因为你在列中有一个数组

JSON_EXTRACT_SCALAR(column_name[OFFSET(0)],"$.name")

你的数据看起来像这样

WITH t0 AS (
    SELECT ARRAY['{"name": "my_name_1"}'] column_name
    UNION ALL 
    SELECT ARRAY['{"name": "my_name_2"}']
    UNION ALL 
    SELECT ARRAY['{"name": "my_name_3"}']
    UNION ALL 
    SELECT ARRAY['{"name": "my_name_4"}']  
)
SELECT JSON_EXTRACT_SCALAR(column_name[OFFSET(0)],"$.name") name FROM t0

【讨论】:

    【解决方案2】:

    试试这个:

    with mytable as (
      select '[{"name": "my_name_1"}] [{"name": "my_name_2"}] [{"name": "my_name_3"}] [{"name": "my_name_4"}]' as mycolumn
    )
    select JSON_EXTRACT_SCALAR(split(trim(mycolumn, ']['), '] [')[OFFSET(0)],"$.name")
    from mytable
    

    【讨论】:

      【解决方案3】:

      如何只使用 json_extract 获取 my_name_1?

      如果您只查找名字 - 就像下面这样简单

      json_extract_scalar(column, '$[0].name')
      

      如果应用于您问题中的样本数据 - 输出是

      注意:上述技巧仅适用于名字,因为它被认为是有效的 json - 直到第二部分。之后您的列不再是 json,因此 json_... 函数不能直接工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-17
        • 1970-01-01
        • 2022-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        相关资源
        最近更新 更多