Sql 使用Json\u查询连接数组值
我在SQLServer数据库中有一个表,它在其中一列中存储JSON。结构如下: 桌上人Sql 使用Json\u查询连接数组值,sql,arrays,sql-server,json-query,open-json,Sql,Arrays,Sql Server,Json Query,Open Json,我在SQLServer数据库中有一个表,它在其中一列中存储JSON。结构如下: 桌上人 | Name | ExtraInfo | |--------|:------------------------------------------:| | Bob | {"Age":"23","Colors":["Red","Blue"]} | | James | {"Age":"26","Colors":["Gre
| Name | ExtraInfo |
|--------|:------------------------------------------:|
| Bob | {"Age":"23","Colors":["Red","Blue"]} |
| James | {"Age":"26","Colors":["Green","Yellow"]} |
如果我运行此查询:
select
Json_value(ExtraInfo,'$.Age') as Age,
json_query(ExtraInfo, '$.Colors') as Colors
from Persons
我会得到这样的东西:
| Age |Colors |
|-----|:-------------------|
| 23 | ["Red","Blue"] |
| 26 | ["Green","Yellow"]|
| Age | Colors |
|-----|:-------------|
| 23 | Red Blue |
| 26 | Green Yellow |
但是,我需要将JSON数组的Colors
属性转换为nvarchar
列,其中数组的所有值由空格字符连接,如下所示:
| Age |Colors |
|-----|:-------------------|
| 23 | ["Red","Blue"] |
| 26 | ["Green","Yellow"]|
| Age | Colors |
|-----|:-------------|
| 23 | Red Blue |
| 26 | Green Yellow |
是否有任何方法可以组合对
json\u query
的多个调用,或者其他类似的方法在一个SQL查询中实现这一点 一个选项是使用交叉应用和字符串\u agg()
示例
Declare @YourTable Table ([Name] varchar(50),[ExtraInfo] varchar(50)) Insert Into @YourTable Values
('Bob','{"Age":"23","Colors":["Red","Blue"]}')
,('James','{"Age":"26","Colors":["Green","Yellow"]}')
Select Json_value(ExtraInfo,'$.Age') as Age
,B.*
From @YourTable A
Cross Apply (
Select Colors = STRING_AGG( value ,' ')
From OpenJSON(json_query(ExtraInfo, '$.Colors'),'$')
) B
返回
Age Colors
23 Red Blue
26 Green Yellow
一个选项是使用交叉应用和字符串\u agg()
示例
Declare @YourTable Table ([Name] varchar(50),[ExtraInfo] varchar(50)) Insert Into @YourTable Values
('Bob','{"Age":"23","Colors":["Red","Blue"]}')
,('James','{"Age":"26","Colors":["Green","Yellow"]}')
Select Json_value(ExtraInfo,'$.Age') as Age
,B.*
From @YourTable A
Cross Apply (
Select Colors = STRING_AGG( value ,' ')
From OpenJSON(json_query(ExtraInfo, '$.Colors'),'$')
) B
返回
Age Colors
23 Red Blue
26 Green Yellow