gpt4 book ai didi

arrays - 在 T-SQL 中解析 JSON 数组

转载 作者:行者123 更新时间:2023-12-03 20:29:24 25 4
gpt4 key购买 nike

在我们的 SQL Server 表中,我们有一个存储有字符串数组的 json 对象。我想以编程方式将该字符串拆分为几列。但是,我似乎无法让它工作,或者即使有可能。

这是在 WITH 子句中创建多个列的可能性,还是在 select 语句中执行此操作更明智?

我删减了一些代码,以对给出的内容给出一个简单的想法。

示例 JSON 类似于 { "arr": ["str1 - str2"] }

SELECT b.* FROM [table] a
OUTER APPLY
OPENJSON(a.value, '$.arr')
WITH
(
strSplit1 VARCHAR(100) SPLIT('$.arr', '-',1),
strSplit2 VARCHAR(100) SPLIT('$.arr', '-',2)
) b

最佳答案

由于标签[tsql]以及OPENJSON的用法我假设这是 SQL-Server。但可能是错误的...请始终指定您的 RDBMS(带版本)。

你的 JSON 很奇怪......我认为你在为了简洁起见试图简化它的时候做得太过分了......

尝试这个:

DECLARE @tbl TABLE(ID INT IDENTITY,YourJSON NVARCHAR(MAX));
INSERT INTO @tbl VALUES(N'{ "arr": ["str1 - str2"] }') --weird example...
,(N'{ "arr": ["a","b","c"] }'); --array with three elements

SELECT t.ID
,B.[value] AS arr
FROM @tbl t
CROSS APPLY OPENJSON(YourJSON)
WITH(arr NVARCHAR(MAX) AS JSON) A
CROSS APPLY OPENJSON(A.arr) B;

一个相当简短的方法(但只适合这个简单的例子)是这样的:
SELECT t.ID
,A.*
FROM @tbl t
OUTER APPLY OPENJSON(JSON_QUERY(YourJSON,'$.arr')) A

暗示

SQL-Server 2016 引入了 JSON 支持

更新:如果 JSON 的内容是一个奇怪的 CSV 字符串......

有一个技巧可以将 CSV 转换为 JSON 数组。尝试这个
DECLARE @tbl TABLE(ID INT IDENTITY,YourJSON NVARCHAR(MAX));
INSERT INTO @tbl VALUES(N'{ "arr": ["str1 - str2"] }') --weird example...
,(N'{ "arr": ["a","b","c"] }') --array with three elements
,(N'{ "arr": ["x-y-z"] }'); --array with three elements in a weird CSV format

SELECT t.ID
,B.[value] AS arr
,C.[value]
FROM @tbl t
CROSS APPLY OPENJSON(YourJSON)
WITH(arr NVARCHAR(MAX) AS JSON) A
CROSS APPLY OPENJSON(A.arr) B
CROSS APPLY OPENJSON('["' + REPLACE(B.[value],'-','","') + '"]') C;
OPENJSON('["' + REPLACE(B.[value],'-','","') + '"]') 中的一些简单替换将从您的 CSV 字符串中创建一个 JSON 数组,该数组可以在 OPENJSON 中打开。

关于arrays - 在 T-SQL 中解析 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com