使用 Json_Query 连接数组值
Posted
技术标签:
【中文标题】使用 Json_Query 连接数组值【英文标题】:Concatenate Array Values Using Json_Query 【发布时间】:2020-05-28 01:13:59 【问题描述】:我在 SQL Server 数据库中有一个表,它在其中一个列中存储 JSON。结构如下:
桌人
| 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"]|
但是,我需要将 JSON 数组的 Colors
属性转换为 nvarchar
列,其中数组的所有值由空格字符连接,如下所示:
| Age | Colors |
|-----|:-------------|
| 23 | Red Blue |
| 26 | Green Yellow |
有什么方法可以组合多个调用json_query
或其他类似方法在单个 SQL 查询中完成此操作?
【问题讨论】:
【参考方案1】:一种选择是使用CROSS APPLY
和string_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
【讨论】:
以上是关于使用 Json_Query 连接数组值的主要内容,如果未能解决你的问题,请参考以下文章