sql - 使用 json 值查询 SQL 列
问题描述
我将此 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
}
]
我正在尝试选择所有 id 值,尝试这样的事情:
select JSON_VALUE(Items, '$.Id') as IdValue
from InvoiceTable
我第一次查询 JSON 值,我想我做的不对,我得到的输出是空的。
任何评论都非常感谢!
解决方案
您需要使用OPENJSON()
显式模式(列定义)和APPLY
运算符来解析 JSON 内容。
桌子:
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
推荐阅读
- react-native - 用户打开通知时导航
- tfs - Azure DevOps 本地成本
- laravel - 在 Laravel 中发送批量电子邮件
- reactjs - 未捕获的 DOMException:无法在“元素”上执行“createShadowRoot”:无法在已托管影子树的主机上创建影子根
- java - 迭代测试用例并将数据发送到java中的函数
- python - 列出按描述符类型过滤的对象属性
- windows - 子进程 Python 2.7 模块:“Windows 错误:[错误 5] 访问被拒绝
- git - 启用快进选项的 git rebase
- sql - SQL:从 sql 列值中检索前三个字符
- c++ - 如何判断 Microsoft Print to PDF 打印机驱动程序何时完成?