从 JSON 列内的数组中获取行数据

alw*_*NET 4 sql sql-server sql-server-2016

我有一个表,其中的'Preference'列存储 JSON 字符串。

a)我想typerowscompanytype中获取。在我对sqlfiddle的尝试中,我得到了五行,但其中没有数据。

SELECT z.[Type]
FROM FinPreferences p
CROSS APPLY OPENJSON(Preference,'$.companytype.type') WITH (
    [Type] INT
) z
WHERE PreferenceID=1
Run Code Online (Sandbox Code Playgroud)

b)如何获得一行字符串的结果

1,2,3,4,5

Preference这是列内的数据

   {
    "companysize":{"min":0,"max":5},
    "distance":{"min":100,"max":200},
    "companytype":{"type":[1,2,3,4,5]},
    "budget":{"min":1000,"max":2000}
    }
Run Code Online (Sandbox Code Playgroud)

小提琴在这里

Pan*_*vos 7

删除该WITH子句并使用该value字段来检索数组的值,例如:

SELECT z.value as Type
FROM FinPreferences p
CROSS APPLY OPENJSON(Preference,'$.companytype.type') z
WHERE PreferenceID=1
Run Code Online (Sandbox Code Playgroud)

$或者就像子句中的路径一样使用WITH

SELECT z.Type
FROM FinPreferences p
CROSS APPLY OPENJSON(Preference,'$.companytype.type') 
            WITH ( Type int '$') z
WHERE PreferenceID=1
Run Code Online (Sandbox Code Playgroud)

WITH适用于OPENJSON返回的结果。路径$.companytype.type只是一个整数数组,它没有任何其他属性