Sql 从JSON列内的数组中以行的形式获取数据

Sql 从JSON列内的数组中以行的形式获取数据,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我有一个表,'Preference'列存储JSON字符串 a) 我想从companytype获取type作为行。 在我的尝试中,我得到了五行,但其中没有数据 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'
列存储JSON字符串

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

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

这是
首选项
列中的数据

   {
    "companysize":{"min":0,"max":5},
    "distance":{"min":100,"max":200},
    "companytype":{"type":[1,2,3,4,5]},
    "budget":{"min":1000,"max":2000}
    }

删除
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
应用于返回的结果。路径
$.companytype.type
只是一个整数数组,它没有任何其他属性

在表模式后,查询问题本身。您可以使用JSON_QUERY@ManojNaik
OPENJSON
没有问题。JSON_查询将不会返回行集,否则将无法执行此操作。我如何将结果作为一个结果来获取,例如1,2,3,4,5,这是B部分?尝试了这个方法,但我没有得到任何值:从FinPreferences p中选择JSON_值(Preference,$.companytype.type')作为[type],其中p.PreferenceID=1@alwaysVBNET那是另一个问题
JSON_值
返回标量值,例如
JSON_值(首选项,$.companytype.type[1])
将返回
2
。如果希望返回多个值,如数组的内容,则需要
JSON\u查询
,例如
JSON\u查询(首选项,$.companytype.type')
将返回
[1,2,3,4,5]