查询具有 json 个值的 SQL 列
Query SQL column with json values
我将此 JSON 值存储在 SQL 文本列中:
[
{
"Id": 1807080,
"InvoiceId": 1605555,
"UnitRate": 6924.00,
"Total": 6924.00
},
{
"Id": 1807081,
"InvoiceId": 1605555,
"UnitRate": 16924.00,
"Total": 16924.00
},
{
"Id": 1807082,
"InvoiceId": 1605555
}
]
我正在尝试 select 所有 id 值,尝试这样的事情:
select JSON_VALUE(Items, '$.Id') as IdValue
from InvoiceTable
我是第一次查询 JSON 值,我想我没有做对,我得到的输出是空的。
非常感谢任何评论!
您需要使用 OPENJSON()
和显式模式(列定义)和 APPLY
运算符来解析 JSON 内容。
Table:
CREATE TABLE InvoiceTable (Items varchar(1000))
INSERT INTO InvoiceTable (Items)
VALUES ('
[
{
"Id": 1807080,
"InvoiceId": 1605555,
"UnitRate": 6924.00,
"Total": 6924.00
},
{
"Id": 1807081,
"InvoiceId": 1605555,
"UnitRate": 16924.00,
"Total": 16924.00
},
{
"Id": 1807082,
"InvoiceId": 1605555
}
]
')
声明:
SELECT j.*
FROM InvoiceTable i
CROSS APPLY OPENJSON(i.Items) WITH (
Id int '$.Id',
InvoiceId int '$.InvoiceId',
UnitRate numeric(10, 2) '$.UnitRate',
Total numeric(10, 2) '$.Total'
) j
结果:
Id InvoiceId UnitRate Total
1807080 1605555 6924.00 6924.00
1807081 1605555 16924.00 16924.00
1807082 1605555
我将此 JSON 值存储在 SQL 文本列中:
[
{
"Id": 1807080,
"InvoiceId": 1605555,
"UnitRate": 6924.00,
"Total": 6924.00
},
{
"Id": 1807081,
"InvoiceId": 1605555,
"UnitRate": 16924.00,
"Total": 16924.00
},
{
"Id": 1807082,
"InvoiceId": 1605555
}
]
我正在尝试 select 所有 id 值,尝试这样的事情:
select JSON_VALUE(Items, '$.Id') as IdValue
from InvoiceTable
我是第一次查询 JSON 值,我想我没有做对,我得到的输出是空的。
非常感谢任何评论!
您需要使用 OPENJSON()
和显式模式(列定义)和 APPLY
运算符来解析 JSON 内容。
Table:
CREATE TABLE InvoiceTable (Items varchar(1000))
INSERT INTO InvoiceTable (Items)
VALUES ('
[
{
"Id": 1807080,
"InvoiceId": 1605555,
"UnitRate": 6924.00,
"Total": 6924.00
},
{
"Id": 1807081,
"InvoiceId": 1605555,
"UnitRate": 16924.00,
"Total": 16924.00
},
{
"Id": 1807082,
"InvoiceId": 1605555
}
]
')
声明:
SELECT j.*
FROM InvoiceTable i
CROSS APPLY OPENJSON(i.Items) WITH (
Id int '$.Id',
InvoiceId int '$.InvoiceId',
UnitRate numeric(10, 2) '$.UnitRate',
Total numeric(10, 2) '$.Total'
) j
结果:
Id InvoiceId UnitRate Total
1807080 1605555 6924.00 6924.00
1807081 1605555 16924.00 16924.00
1807082 1605555