SQL Server 2014 Чтение значений json в массиве, хранящемся в столбце NVARCHAR - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть таблица с 3 столбцами:

id INT, name NVARCHAR(50), myData NVARCHAR(MAX)

myData просто содержит массив строк json что-то вроде

["Fingers"]
["Fingers","Right-"]
["Arm","Fingers","Left-"]

Я хочу выбрать все значения в 1 столбце, например

Fingers
Fingers
Right-
Arm
Fingers
Left-

Как я могу это сделать? Я не верю, что SQL Server 2014 может читать данные JSON.

Как только это будет сделано, я могу выбрать каждое уникальное значение с помощью оператора SELECT DISTINCT.

Мне нужно иметь возможность делать это с T-SQL, и я не могу создавать какие-либо функции, чтобы справиться с этим, должен быть только T-SQL.

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 28 апреля 2018

Пожалуйста, используйте это, где [#json] ваша исходная таблица:

;with [data] as
(
    select [mydata] = replace(replace(replace([mydata], '[', SPACE(0)), ']', space(0)), '"', space(0)) from [#json]
)
,[split] as
(
    select
        [mydata] = [s].[str]
    from
        [data] as [d]
    cross apply
        (       
            select 
                [str] = [x].[c].[value]('(./text())[1]', 'nvarchar(4000)')
            from 
                ( 
                    select [x] = convert(xml, '<i>' + replace([d].[mydata], ',', '</i><i>') + '</i>').[query]('.')
                ) as [a] 
            cross apply 
                [x].[nodes]('i') as [x]([c])
        ) as [s]
)
select 
    [mydata] 
from 
    [split];

Полный запрос на тестирование: https://pastebin.com/r4AwxPYS

...