从JSON列中的数组中获取数据作为行

时间:2018-10-01 09:39:30

标签: sql sql-server sql-server-2016

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

a)我想从type获得companytype作为。  在尝试sqlfiddle时,我得到了五行,但其中没有数据。

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

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}
    }

Fiddle is here

1 个答案:

答案 0 :(得分:2)

要么删除WITH子句,然后使用value字段来检索数组的值,例如:

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

或者仅将$用作WITH子句中的路径:

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

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