Как вставить только часть элемента JSON в поле SQL - PullRequest
1 голос
/ 05 мая 2020

Я использую следующий код в хранимой процедуре SQL Server 2016 и хотел бы разделить значение 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 Ответ

0 голосов
/ 05 мая 2020

Я понял;

     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)  
...