查询 Json 数组列和其他当前 table 列
Querying Json array column and other current table column
我有一个 table,它包含三列,我需要从中检索数据。 OtherNames 列之一包含 Json 个对象的数组。
CREATE TABLE Persons (
NameID int,
CurrentName varchar(255),
OtherNames varchar(max),
);
我可以很好地查询该列,但是我怎样才能将它与它所在的 table 通过 ID 连接起来,这样我就可以检索 table 上的所有信息以及与之相关的内容这一行。
DECLARE @test VARCHAR(MAX)
SELECT @test = '[{"Name":"Bob","DateTime":"03/03/2022"},{"Name":"Adam","DateTime":"04/05/2022"}]'
SELECT * FROM OPENJSON(@test)
WITH (
Name VARCHAR(MAX) '$.Name',
DateTime VARCHAR(MAX) '$.DateTime'
)
以上结果
Bob 03/03/2022
Adam 04/05/2022
我如何加入才能显示 NameID 和 CurrentName?
NameID Name DateTime CurrentName
1 Bob 03/03/2022 Rob
1 Adam 04/05/2022 Rob
可能有多个记录和多个 Json 数据..
正如我在评论中提到的那样,对列使用 OPENJSON
,而不是标量变量,它只包含其中一行的值,以及另一行数据的 none。
SELECT P.NameID,
ONs.[Name],
ONs.[DateTime],
P.CurrentName
FROM dbo.Persons P
CROSS APPLY OPENJSON(P.OtherNames)
WITH ([Name] varchar(255),
[DateTime] date) ONs;
请注意,由于您的值 [DateTime]
取决于文化,您可能需要将其定义为 WITH
中的 varchar(10)
,然后将其 CONVERT
定义为date
中的SELECT
带有样式代码。
我有一个 table,它包含三列,我需要从中检索数据。 OtherNames 列之一包含 Json 个对象的数组。
CREATE TABLE Persons (
NameID int,
CurrentName varchar(255),
OtherNames varchar(max),
);
我可以很好地查询该列,但是我怎样才能将它与它所在的 table 通过 ID 连接起来,这样我就可以检索 table 上的所有信息以及与之相关的内容这一行。
DECLARE @test VARCHAR(MAX)
SELECT @test = '[{"Name":"Bob","DateTime":"03/03/2022"},{"Name":"Adam","DateTime":"04/05/2022"}]'
SELECT * FROM OPENJSON(@test)
WITH (
Name VARCHAR(MAX) '$.Name',
DateTime VARCHAR(MAX) '$.DateTime'
)
以上结果
Bob 03/03/2022
Adam 04/05/2022
我如何加入才能显示 NameID 和 CurrentName?
NameID Name DateTime CurrentName
1 Bob 03/03/2022 Rob
1 Adam 04/05/2022 Rob
可能有多个记录和多个 Json 数据..
正如我在评论中提到的那样,对列使用 OPENJSON
,而不是标量变量,它只包含其中一行的值,以及另一行数据的 none。
SELECT P.NameID,
ONs.[Name],
ONs.[DateTime],
P.CurrentName
FROM dbo.Persons P
CROSS APPLY OPENJSON(P.OtherNames)
WITH ([Name] varchar(255),
[DateTime] date) ONs;
请注意,由于您的值 [DateTime]
取决于文化,您可能需要将其定义为 WITH
中的 varchar(10)
,然后将其 CONVERT
定义为date
中的SELECT
带有样式代码。