TSQL,如何从数据库的多个 JSON 行中检索数据

时间:2021-05-05 12:39:54

标签: sql json tsql

我的表格行中有与示例相同的 JSON:

<头>
json_data
[{"d":"2021-05-05T12:16:18.9175335","l":"temp12@cor.net","a":"test1","c":"Kom1"}]
[{"d":"2021-05-05T12:16:37.7258608","l":"temp12@cor.net","a":"test2","c":"Kom2"}]
[{"d":"2021-05-05T12:17:30.2390585","l":"temp12@cor.net","a":"test3","c":"Kom3"}]

我想以表格格式获取数据。什么时候是 1 行,我使用没有问题:

DECLARE @JSONINPUT NVARCHAR(max)  
SET @JSONINPUT = (select top 1 cast(json_data as varchar(max)) from mytable )

IF (ISJSON(@JSONINPUT) = 1)  
BEGIN  
SELECT * from OPENJSON(@JSONINPUT )
WITH (
[Kom] nvarchar(max) '$.c',
[Date] DATETIME2  '$.d',
[User] nvarchar(150) '$.a'
);
END  

我得到:

<头>
通讯 日期 用户
Kom1 2021-05-05 12:16:18.9175335 测试1

但我不知道如何从所有行中获取数据。

2 个答案:

答案 0 :(得分:1)

正如我提到的,语法没有什么不同:

SELECT OJ.Kom,
       OJ.[Date],
       OJ.[User]
FROM dbo.YourTable YT
     CROSS APPLY OPENJSON(YT.JSONColumn)
                 WITH ([Kom] nvarchar(max) '$.c',
                       [Date] DATETIME2  '$.d',
                       [User] nvarchar(150) '$.a') OJ;

答案 1 :(得分:1)

CROSS APPLYOPENJSON 一起使用

SELECT j.Kom, j.[Date], j.[User]
FROM mytable
CROSS APPLY OPENJSON(json_data)
WITH (
    [Kom] nvarchar(max) '$.c',
    [Date] DATETIME2  '$.d',
    [User] nvarchar(150) '$.a'
) AS j;
相关问题