SQL получить значения в кавычках - PullRequest
1 голос
/ 08 мая 2020

Я столкнулся со следующей проблемой: у меня есть пара строк в SQL, и я пытаюсь извлечь из них лишь небольшую часть, но не могу заставить ее работать.

Примеры моих строк:

{"@odata.type":"#make.this.short","Id":0,"Value":"Stackoverflow"}

[{"@odata.type":"#Mmake.this.short","Id":1,"Value":"Stackoverflow1"},{"@odata.type":"#make.this.short","Id":2,"Value":"Stackoverflow2"}]

{"@odata.type":"#make.this.short","Claims":"i:0#.f|membership|name@email.nl","DisplayName":"Lastname F. (Firstname)","Email":"Name@email.nl","Picture":"https://picture.com/","Department":null,"JobTitle":null}

Теперь я пытаюсь написать хранимую процедуру и вернуть следующие значения:

Stackoverflow

Stackoverflow1, Stackoverflow2

и name@email.nl

Я пробовал работать с SUBSTRING, LEN, RIGHT, CHARINDEX и REVERSE, но не могу получить то, что мне нужно. Значение Value: конечно может иметь разную длину для каждой записи.

Моя идея заключалась в том, чтобы подсчитать общую строку (len string), затем получить первое «справа» и вычесть это из общей строки. Затем я бы попытался получить вторую строку и вычесть ее из первой. что осталось, это значение внутри, и я мог бы использовать подстроку.

Но это сработает только для первого, остальные совсем другие, и почему-то я даже не могу заставить первый делать то, что мне нравится. (Кажется, я не могу получить вторую "справа")

Надеюсь, этого достаточно, чтобы вы могли указать мне правильное направление, чтобы исправить эту проблему.

Спасибо

1 Ответ

2 голосов
/ 08 мая 2020

Поскольку вы используете SQL Server 2017, вы должны использовать функции JSON для этого

SELECT JSON_VALUE('{"@odata.type":"#make.this.short","Id":0,"Value":"Stackoverflow"}','$.Value')

SELECT JSON_VALUE('{"@odata.type":"#make.this.short","Claims":"i:0#.f|membership|name@email.nl","DisplayName":"Lastname F. (Firstname)","Email":"Name@email.nl","Picture":"https://picture.com/","Department":null,"JobTitle":null}','$.Email')


SELECT STRING_AGG(JSON_VALUE(value,'$.Value') ,',')
FROM OPENJSON('[{"@odata.type":"#Mmake.this.short","Id":1,"Value":"Stackoverflow1"},{"@odata.type":"#make.this.short","Id":2,"Value":"Stackoverflow2"}]','$')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...