【问题标题】:Get data as rows from array inside JSON column从 JSON 列中的数组获取数据作为行
【发布时间】:2018-10-01 09:39:30
【问题描述】:

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

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

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

b) 我怎样才能将结果作为一个字符串 row

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

【问题讨论】:

  • 发布表架构,在问题本身中查询。
  • 你可以使用 JSON_QUERY
  • @ManojNaik OPENJSON 没有任何问题。 JSON_QUERY 也不会返回行集

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


【解决方案1】:

要么删除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只是一个整数数组,没有任何其他属性

【讨论】:

  • 这行得通。我如何将结果作为一个结果,例如 1、2、3、4、5,即 B 部分?
  • 试过了,但我没有得到任何值:SELECT JSON_VALUE(Preference, '$.companytype.type') AS [Type] FROM FinPreferences p WHERE p.PreferenceID=1
  • @alwaysVBNET 这是一个不同的问题。 JSON_VALUE 返回标量值,例如 JSON_VALUE( Preference, '$.companytype.type[1]' ) 将返回 2。如果您希望返回多个值,例如数组的内容,则需要 JSON_QUERY,例如 JSON_QUERY( Preference, '$.companytype.type' ) 将返回 [1,2,3,4,5]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2021-11-02
相关资源
最近更新 更多