tjg*_*g92 5 t-sql sql-server arrays json
在我们的 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
Run Code Online (Sandbox Code Playgroud)
由于标签[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;
Run Code Online (Sandbox Code Playgroud)
一个相当简短的方法(但只适合这个简单的例子)是这样的:
SELECT t.ID
,A.*
FROM @tbl t
OUTER APPLY OPENJSON(JSON_QUERY(YourJSON,'$.arr')) A
Run Code Online (Sandbox Code Playgroud)
SQL-Server 2016 引入了 JSON 支持
有一个技巧可以将 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;
Run Code Online (Sandbox Code Playgroud)
中的一些简单替换OPENJSON('["' + REPLACE(B.[value],'-','","') + '"]')将从您的 CSV 字符串中创建一个 JSON 数组,该数组可以在 OPENJSON 中打开。
| 归档时间: |
|
| 查看次数: |
7918 次 |
| 最近记录: |