1

如果该列具有如下值

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

我如何只my_name_1使用 json_extract?

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

4

3 回答 3

0

试试这个:

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
于 2021-09-27T09:12:32.230 回答
0

如何仅使用 json_extract 获取 my_name_1?

如果您只寻找名字 - 它就像下面一样简单

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

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

在此处输入图像描述

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

于 2021-09-27T17:17:12.167 回答
0

你可以试试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
于 2021-09-27T07:27:32.870 回答