Получить индекс массива из данных JSON SQL Server

{
    "Name": ["dokumen_1","dokumen_2","dokumen_3","dokumen_4"],
    "Date": [0,0,0,0],
    "Progress": [0,0,0,0]
}

Я хочу получить значение Date и Progress в соответствии с позицией Name.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я изменил значения 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

Большое спасибо, а что, если я буду извлекать данные только на основе имени "dokumen_3"?

Irvan Affandy 06.12.2022 06:43

@IrvanAffandy Просто добавьте WHERE value='dokumen_3'

John Cappelletti 06.12.2022 06:44

Другой возможный подход — это комбинация OPENJSON() со схемой по умолчанию и соответствующими JOINs. Конечно, вам нужен как минимум 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]

Другие вопросы по теме