Разделение строки на основе слова - PullRequest
0 голосов
/ 07 января 2020

У меня есть JSON данные, хранящиеся в виде текста в столбце таблицы. Ниже приведен частичный фрагмент того, что содержится в одном столбце.

То, что я пытаюсь сделать, - это получить текст, который является текущим как col1, и текст, который предшествовал как col2. Не уверен, как это сделать go. Любая помощь будет оценена

  "field_text": { 
    "current": "This is current text",
    "previous": "This is previous text"
  },
  "CustomerIDs": { 
    "current": "1234",
    "previous": ""
  }
}.

1 Ответ

0 голосов
/ 26 января 2020

Поскольку у нас нет такой роскоши, как парсеры JSON, которые доступны в более новых версиях SQL Server, вот уродливый подход, который может сработать, если структура вашей строки JSON будет статичной c. Для простоты я предположил, что нет никаких пробелов, кроме указанных в c строк для извлечения. Таким образом, вы можете настроить несколько цифр (11,12,13) ​​в этом коде, чтобы учесть это. Если вы go пройдете через него, вы увидите, что это в основном подход «разделяй и властвуй» для получения нужной нам строки.

with your_table as

(select '{"field_text":{"current":"This is current text","previous":"This is previous text"},"CustomerIDs":{"current":"1234","previous":""}}' as json_text)

select json_text, txt1, txt2
from your_table t1
cross apply (select charindex('"current":"',json_text) as i1) t2
cross apply (select charindex('"previous":"',json_text,(i1 + 1)) as i2) t3
cross apply (select substring(json_text,(i1+11),(i2-i1-13)) as txt1) t4
cross apply (select charindex('"previous":"',json_text) as i3) t5
cross apply (select charindex('"},',json_text,(i3 + 1)) as i4) t6
cross apply (select substring(json_text,(i3+12),(i4-i3-12)) as txt2) t7;

DEMO ON SQL SERVER 2012

...