{
"Name": ["dokumen_1","dokumen_2","dokumen_3","dokumen_4"],
"Date": [0,0,0,0],
"Progress": [0,0,0,0]
}
Я хочу получить значение Date
и Progress
в соответствии с позицией Name
.
Я изменил значения date
и progress
для лучшей иллюстрации.
ПРИМЕЧАНИЕ: в 2016 году JSON_VALUE должен быть буквальным
Пример
Declare @JSON varchar(max) = '
{
"Name":["dokumen_1","dokumen_2","dokumen_3","dokumen_4"],
"Date":[1,2,3,4],
"Progress":[11,12,13,12]
}'
Select Name = value
,Date = JSON_VALUE(@JSON,'$.Date['+[key]+']')
,Progress = JSON_VALUE(@JSON,'$.Progress['+[key]+']')
From openjson(@JSON,N'$.Name')
Результаты
Name Date Progress
dokumen_1 1 11
dokumen_2 2 12
dokumen_3 3 13
dokumen_4 4 12
@IrvanAffandy Просто добавьте WHERE value='dokumen_3'
Другой возможный подход — это комбинация OPENJSON()
со схемой по умолчанию и соответствующими JOIN
s. Конечно, вам нужен как минимум SQL Server 2016, чтобы использовать встроенную поддержку JSON.
DECLARE @json varchar(max) = '
{
"Name":["dokumen_1","dokumen_2","dokumen_3","dokumen_4"],
"Date":[101,102,103,104],
"Progress":[201,202,203,204]
}'
SELECT n.[value] AS Name, d.[value] AS Date, p.[value] AS Progress
FROM OPENJSON(@json, '$.Name') n
LEFT JOIN OPENJSON(@json, '$.Date') d ON n.[key] = d.[key]
LEFT JOIN OPENJSON(@json, '$.Progress') p ON n.[key] = p.[key]
Большое спасибо, а что, если я буду извлекать данные только на основе имени "dokumen_3"?