【问题标题】:Query SQL column with json values使用 json 值查询 SQL 列
【发布时间】:2020-09-17 08:08:27
【问题描述】:

我将这个 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 值,我想我做的不对,我得到的输出是 null。

任何评论都非常感谢!

【问题讨论】:

    标签: sql sql-server tsql json-query


    【解决方案1】:

    您需要使用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     
    

    【讨论】:

    • 谢谢@Zhorov。如何选择多个字段,例如,我们最终将在该 json 对象中添加两个值,UnitRate 和 Total,我将如何选择所有三个值?我现在会更新我的问题,我也会选择你的答案是正确的。
    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多