如何仅将部分 JSON 元素插入 SQL 字段

Posted

技术标签:

【中文标题】如何仅将部分 JSON 元素插入 SQL 字段【英文标题】:How to insert only a portion of the JSON element into a SQL field 【发布时间】:2020-05-05 15:30:37 【问题描述】:

我在 SQL Server 2016 存储过程中使用以下代码,我想将 Journal ISSN 值拆分为 2 个不同的字段。

DECLARE @json nVARCHAR(MAX) =
      '["Journal ISSN" : "15221059, 15309932",
       "Journal ISSN" : "23660058, 2366004X"]'

INSERT INTO A_ADMIN_IMPACT_FACTORS_2020 ([Journal ISSN], [ISSN FirstEight],  [ISSN SecondEight_if Comma])
    SELECT [Journal ISSN]
    FROM OPENJSON(@json)
    WITH ([Journal ISSN] nvarchar(50))

我已经尝试添加

     SUBSTRING ([Journal ISSN],1,8) nvarchar(50) 

在不同的地方,但我确定语法是错误的。

有人可以指出我正确的方向,以便我最终得到三列吗?

具有完整价值的一个 第一个部分在逗号或整个值(如果没有逗号)和 一个逗号后剩下的内容

当我输入此内容时,我发现我可能能够使用计算列,但我仍然想知道如何在存储过程中做到这一点。

【问题讨论】:

【参考方案1】:

我知道了;

     INSERT INTO A_ADMIN_IMPACT_FACTORS_2020 ([Journal ISSN], [ISSN Primary], [ISSN 
     Secondary])
     SELECT [Journal ISSN], SubString([Journal ISSN],1,8) as [ISSN Primary], CASE WHEN 
     CHARINDEX(',', [Journal ISSN]) > 1 THEN SubString([Journal ISSN], 11,8) ELSE '' 
     END AS [ISSN Secondary]
     FROM OPENJSON(@json)
     WITH ([Journal ISSN] nvarchar(50)  

【讨论】:

以上是关于如何仅将部分 JSON 元素插入 SQL 字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用查询设置字段的年份部分

如何仅将列值插入前一千行

如何仅将对象的一部分发送到django中的模板

问题在hive中插入数据创建小部分文件

如何仅将部分 OpenGL 代码实现到使用 SDL 编写的游戏中?

Rails 仅将模型嵌套关联中的某些字段呈现为 json