我的表格行中有与示例相同的 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 |
但我不知道如何从所有行中获取数据。
答案 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 APPLY
与 OPENJSON
一起使用
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;