【发布时间】:2020-03-22 19:06:31
【问题描述】:
我想将 json 字符串 '[{"_":7},{"_":13},{"_":17}]' 格式化为 '[7,13,17]'
尝试在 TSQL 中使用 REPLACE 方法。我必须使用 REPLACE 方法三次才能得到想要的结果。
SELECT REPLACE(REPLACE(REPLACE('[{"_":7},{"_":13},{"_":17}]','},{"_":',', '),'{"_":',''),'}','')
有没有更好的方法来做到这一点? 我正在使用 SQL Server 2016。
在这篇文章的一些 cmet 之后,这是我的实际问题。
我有一些客户数据。客户表
CustomerId | Name
1 ABC
2 XYZ
3 EFG
每个客户都有一些感兴趣的领域。客户感兴趣的领域
CustomerAreaInterestId | FK_CustomerId | FK_AreaOfInterestId
1 1 2
2 1 3
3 1 5
4 2 1
5 2 2
6 3 3
7 3 4
兴趣区域表
AreaOfInterestId | Description
1 Interest1
2 Interest2
3 Interest3
4 Interest4
5 Interest5
在最终结果集中,我必须将感兴趣的区域 id 包含为值数组
[
{
"CustomerName": "ABC",
"AreaofInterest": "[2,3,5]"
},
{
"CustomerName": "XYZ",
"AreaofInterest": "[1,2]"
},
{
"CustomerName": "EFG",
"AreaofInterest": "[3,4]"
}
]
结果也包含其他一些数据。为了代码简洁,我省略了。
【问题讨论】:
-
您既没有格式化也没有替换。您正在查询一个对象数组,提取属性值并将它们作为数组本身返回。您需要为此编写查询
-
@PanagiotisKanavos 我正在按照他的方法生成该输出。 stackoverflow.com/a/42778050/764369
-
这与 JSON 无关。您正在询问如何在 SQL Server 2016 中聚合字符串。This answer 对该问题显示了正确的查询,尽管它 not 与常见的 XML 方法不同。无需更换,
-
发布 actual 问题、actual 数据和 actual 输出。如果您对该查询的结果有疑问,添加额外的 REPLACE 语句不会解决问题。
-
您需要更少个替代品,而不是更多。链接的答案适用于引用的 string 值。您在问如何使用不是的 numeric 值。您需要删除一些引号。或者只是使用 XML 技术
标签: sql json sql-server tsql sql-server-2016